Мне нужно знать результат программу на более позднем этапе, поэтому, следуя советам здесь https://unix.stackexchange.com/a/219555/423606
Основная проблема, с которой я столкнулся при исследовании моего Вариант использования — расширение переменных оболочки. А именно, двойные кавычки, расширяющие $?, когда я этого не хотел.
Итак, если мы подойдем к этой формулировке проблемы как к мысленному эксперименту, у нас будут следующие требования:
- необходимо запустить экран через ssh
- необходимо записать код возврата команды экрана на диск
Позвольте мне показать вам, что я имею в виду.
Код: Выделить всё
$ ssh -t me@remote bash -c 'screen -d -m -L -Logfile ~/screenlog bash -c "$(exit 1); echo $? >> ~/screenlog.test"'
Connection to localhost closed.
Код: Выделить всё
me@remote:~# cat screenlog.test
0
Код: Выделить всё
me@remote:~# screen -d -m -L -Logfile ~/screenlog bash -c '$(exit 1); echo $? >> ~/screenlog.test'
me@remote:~# cat screenlog.test
0
1
Код: Выделить всё
$ ssh -t me@remote 'screen -d -m -L -Logfile ~/screenlog $(exit 1); echo $? >> ~/screenlog.test'
Connection to localhost closed.
Код: Выделить всё
me@remote:~# cat screenlog.test
0
1
0
Итак, я продемонстрировал, что необходимы как уровень цитирования ssh, так и уровень bash -c. Учитывая два уровня кавычек и только два типа кавычек, один из которых — двойные кавычки, является ли предрешенным вывод о том, что невозможно получить код возврата экранной команды, запущенной через ssh?
вы можете избежать кавычек
Код: Выделить всё
$ ssh -t me@remote 'screen -d -m -L -Logfile ~/screenlog bash -c \"$(exit 1); echo $? >> ~/screenlog.test\"'
Подробнее здесь: https://stackoverflow.com/questions/788 ... mmand-over
Мобильная версия