Mam następującą prostą komendę powłoki, która, jak się spodziewam, zawiedzie i działa na moim lokalnym:
$ DIR=$(false) && echo ok || echo fail
fail
$ sh -c 'DIR=$(false) && echo ok || echo fail'
fail
Ale kiedy przekazuję to polecenie przez ssh, nie działa już zgodnie z oczekiwaniami:
$ ssh user@host sh -c 'DIR=$(false) && echo ok || echo fail'
ok
Nie jestem więc pewien, gdzie jest problem. Już używam apostrofu, aby uniknąć zbyt wczesnego rozszerzania zmiennych .
Co się dzieje i jak sprawić, by podstawienie polecenia działało poprawnie na podstawie kodu wyjścia zwróconego z przypisania zmiennej?
Znalazłem kolejną anomalię w następującym przykładzie:
$ ssh user@host sh -c 'echo 1; echo 2;'
2
który drukuje tylko 2, zamiast drukować zarówno 1, jak i 2.