У меня есть следующая простая команда оболочки, которая, как я ожидаю, потерпит неудачу, и она работает на моем локальном компьютере:
$ DIR=$(false) && echo ok || echo fail
fail
$ sh -c 'DIR=$(false) && echo ok || echo fail'
fail
Но когда я передаю эту команду через ssh, она больше не работает, как ожидалось:
$ ssh user@host sh -c 'DIR=$(false) && echo ok || echo fail'
ok
Так что я не совсем уверен, где проблема. Я уже использую апостроф, чтобы избежать слишком раннего расширения переменных.
Что происходит и как заставить подстановку команд работать корректно на основе кода завершения, возвращенного из присваивания переменной?
Еще одна аномалия, которую я нашел на следующем примере:
$ ssh user@host sh -c 'echo 1; echo 2;'
2
который печатает только 2, вместо печати как 1, так и 2.