Intereting Posts

Запуск удаленного скрипта с помощью команды ssh

У меня есть сценарий на удаленном сервере сервера Debian, и я хочу запустить команду, вызывая:

ssh server "find.sh" 

Мой скрипт find.sh находится в:

 /home/user/bin 

Прежде всего, я запустил ssh-сервер «echo $ PATH» и ответил на этот путь:

 /home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

Похоже, что переменная PATH в порядке, но она не работает. Единственный способ, которым я мог заставить это работать, – это вызвать полный путь:

 ssh server "/home/user/bin/find.sh" 

Есть ли простой способ заставить его работать без указания полного пути?

Вам нужно будет определить $PATH в файле ~/.bashrc на целевом сервере в начале файла:

 export PATH=$PATH:/home/user/bin 

https://stackoverflow.com/questions/940533/how-do-i-set-path-such-that-ssh-userhost-command-works :

Bash в неинтерактивном режиме считывает файл ~ / .bashrc

ssh server "echo $PATH" – это не тот же режим работы, что и ssh server "find.sh" . Первый содержит метасимволы оболочки (в частности, пробел) и, следовательно, будет выполняться командой «sh -c» указанная команда »; второй – нет, и поэтому будет выполняться командой "exec ('specific_command')". Разница тонкая, но в этом случае (потому что это оболочка, которая задает переменную окружения) имеет побочные эффекты, которых вы не ожидаете.

Вы можете заставить оболочку сделать что-то вроде ssh server 'bash -c "find.sh"'

Набрав ssh server "echo $PATH" собирается развернуть PATH локально. Таким образом, команда, которую вы фактически выполняете, – это ssh server "echo /home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" , а сервер будет выдавать тот же результат каждый раз, когда он получает эту команду, независимо от того, что PATH находится на стороне сервера. Если вы хотите расширить PATH на стороне сервера, вы можете использовать: ssh server 'echo "$PATH"' . Обратите внимание, что для предотвращения локального расширения $PATH используются одиночные кавычки.