Сессия замазки вручную и сессия Plink ведут себя по-разному

446
Abhi

Привет, я подключаюсь к удаленному серверу Linux, используя шпаклевку на компьютере-победителе, и выполняю там определенные команды. Я хочу автоматизировать задачи с помощью plink следующим образом:

plink serveradress -l userid -pwd pass -batch "ls;cmd1"

Если я выполняю команды "ls; cmd1; cmd2" вручную через putty / plink, то все работает нормально. Однако, если я делаю то же самое torhgh cmd.ext и выше команды plink, я получаю «bash cmd1 not found». Однако команда ls работает нормально.

Почему это происходит? PS: cmd1 не является встроенной командой linux. Полагаю, он создан специально для сервера.

Как мне сделать эту работу?

0

1 ответ на вопрос

0
Ljm Dullaart

Когда bash жалуется на «команда не найдена», это означает, что команда cmd1не может быть найдена в $PATH. Так что либо вы должны убедиться, что путь для cmd1всегда в $PATH, или вы должны указать полный путь для cmd1:

plink serveradress -l userid -pwd pass -batch "ls;/where/you/can/find/cmd1" 

Вы можете найти это полное имя which cmd1в вашей интерактивной оболочке (через putty).

Вы можете установить PATH в ~/.bashrcили ~/.profile, то есть .bashrc или .profile в вашем домашнем каталоге.

Вы можете проверить PATH с помощью echo $PATHсеанса замазки или с помощью plink serveradress -l userid -pwd pass -batch 'echo $PATH'(обратите внимание на одинарные кавычки). Если вы делаете оба, вы должны увидеть разницу.

Я не знаю пути к таким скриптам, как bashrc и т. Д., Которые выполняются во время моего login_session = on. Можно ли как-нибудь запустить сеанс типа «LOGIN» через plink ... поэтому я автоматически запускаю эти сценарии, и что cmd1 работает, хотя я не знаю пути. Альтернативно, есть ли какой-нибудь способ, которым я могу знать все пути к сценариям, которые выполняются во время моего login_session = on. PS - ничего из этого нет в моем доме, реж. Abhi 6 лет назад 0
Добавил дополнительную информацию к ответу; проверьте, достаточно ли это для вас. Ljm Dullaart 6 лет назад 0
Фантастика. За исключением одной, все мои команды теперь работают в неинтерактивной сессии! Что касается одного cmd, который не работает, так это то, что cmd установлен во втором .sh, который является source-d из основного файла .sh. Также в .I можно вручную создать фактический путь .sh для источника из основного файла .sh .. но я не предпочитаю эту опцию, так как этот путь является динамическим -Он регулярно меняется: /. Кроме того, не является ли такая прямая передача файла .sh из другого основного .sh / alias-ing проблематично в неинтерактивных сеансах / сеансах без входа в систему случайно? Abhi 6 лет назад 0