Я предполагал, что это то же самое, но это не так.
В моем конкретном случае сценарий сборки работает нормально, когда выполняется как ./build.sh из сеанса ssh на сервере сборки, как это
$ssh user@host
$./build.sh
, но не работает, когда запускается как аргумент ssh, например:
$ssh user@host /home/user/build.sh
или как этот
$ssh user@host ./build.sh
Сам сценарий просто вызывает кучу двоичных файлов, и их сообщения об ошибках не очень полезны для отладки.
Но не должно иметь значения, что находится в сценарии, если среда такая же, верно? Так в чем может быть разница?
Редактировать: Не знаю, имеет ли это значение, но описанное поведение происходит в гостевой системе ArchLinux Virtualbox без среды рабочего стола. Я также попробовал то же самое на виртуальной машине Ubuntu18.04 с окружением рабочего стола, и сценарий работал правильно в обоих случаях.
Думаю, я понял это.
Разница между два случая - интерактивная и неинтерактивная оболочка, которые действительно существенно отличаются друг от друга.
Вместо запуска сценария как $ ssh user @ host ./build.sh
работало открытие оболочки входа в систему. сначала вызовом bash -l
, например:
$ssh user@host bash -l ./build.sh
Я не знаю, делает ли это среда выполнения такой же, как при запуске скрипта вручную через ssh, но в моем случае это исправило ошибку.
Если вы не укажете программу для запуска, ssh запустит интерактивную оболочку , для которого назначается псевдотерминал.
Если вы укажете команду для запуска, выделение псевдотерминала не произойдет, что приведет к сбою некоторых команд (особенно тех, которые используют переменную TERM, например, curses front -ends).
Вы можете принудительно выделить терминал с помощью переключателя -t
, проверьте, решает ли это вашу проблему.
Логика такая:
ssh remote_host предполагает, что ваше имя пользователя на вашем локальном компьютере такое же, как и на удаленном, а если ваше имя пользователя отличается на удаленном компьютере, вам необходимо проанализировать имя удаленного пользователя в формате: ssh username @ remote-host
Нет причин, по которым что-то вроде ssh user @ IP ./exe.sh
не работает, если сам сценарий, разрешения и путь правильные.