2011-02-09 3 views
0

У меня есть сценарий bash, который использует ssh для выполнения команд удаленно. я заметил, однако весьма значительное различие в поведении в зависимости от запуска ли я команды в фоновом режиме или нет:ssh выполняет команды удаленно, как определяется PATH?

ssh host cmd1 && cmd2 && cmd3 

против

ssh host "cmd1 && cmd2 && cmd3" & 

Во втором случае некоторые команды не выполняются правильно, потому что они надевают 't появляется на $ PATH. Кажется, что в этих двух ситуациях среда отличается (при передаче env в качестве команды я заметил довольно значительные различия).

Как это объяснить?

Я знаю, что могу переопределить переменную PATH, но есть ли способ сделать это более элегантно, чтобы второй пример выглядел как первый с функцией «&»?

ответ

6

В первой команде вы, вероятно, выполняете cmd2 и cmd3 на локальном хосте, а не удаленном. Слова && интерпретируются локальной оболочкой и не передаются в качестве аргументов для ssh.

1

PATH устанавливается во время компиляции sshd:

[~]> grep PATH /etc/sshd_config   
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin 

Всегда использовать абсолютные пути при выполнении удаленной команды.

Смежные вопросы