Как установить $PATH таким образом, чтобы `ssh user @host command` работал?
Я не могу установить новый $PATH, чтобы он использовался при выполнении команд через ssh [email protected] command
. Я попытался добавить export PATH=$PATH:$HOME/new_path
в ~/.bashrc и ~/.profile на удаленном компьютере, но выполнение ssh [email protected] "echo \$PATH"
показывает, что это изменение не было выбрано (оно показывает/usr/local/sbin:/usr/local/бен:/USR/SBIN:/USR/бен:/SBIN:/бен:/USR/игры). На удаленном компьютере работает Ubuntu 8.04.
Я уверен, что я мог взломать его в /etc/profile, но это не чистое решение, и оно работает только при наличии доступа root.
Ответы
Ответ 1
Как сказано в гравюре, ~/.bashrc - это то, что вы хотите, поскольку оно получено неинтерактивными оболочками без входа.
Я ожидаю, что проблема, с которой вы столкнулись, связана с файлом Ubuntu ~/.bashrc по умолчанию. Обычно он начинается с чего-то вроде этого:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Вы хотите поставить что-либо для неинтерактивных оболочек перед этой строкой.
Ответ 2
У вас есть ~/.bash_login
или ~/.bash_profile
?
Bash в интерактивном режиме проверяет эти файлы и использует первый существующий в следующем порядке:
-
~/.bash_profile
-
~/.bash_login
-
~/.profile
Итак, если у вас есть ~/.bash_profile
, то любые изменения, которые вы делаете в ~/.profile
, будут недоступны.
Bash в неинтерактивном режиме иногда читает файл ~/.bashrc
(который также часто является источником из интерактивных скриптов.) Под "иногда" я подразумеваю, что он зависит от распределения: довольно странно, есть параметр времени компиляции для включения этого. Debian позволяет читать ~/.bashrc
, в то время как, например, Arch не делает.
ssh
похоже, использует неинтерактивный режим, , поэтому ~/.bashrc
должно быть достаточно. При возникновении таких проблем обычно я добавляю несколько эхо-сигналов, чтобы увидеть, какие файлы запускаются.
Ответ 3
Документация ssh гласит:
Если задана команда, она выполняется на удаленном хосте вместо оболочки входа.
поэтому добавление к файлам bashrc не работает. однако у вас есть следующие возможности:
-
Если параметр PermitUserEnvironment
задан в конфигурации sshd, вы можете добавить свой параметр PATH в ~/.ssh/environment
-
ssh remotemachine 'bash -l -c "somecommand"'
Ответ 4
Вы всегда можете сказать:
ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'
Ответ 5
Просто у меня была такая же проблема, я решил ее:
ssh [email protected] PATH=\$HOME/bin:\$PATH\; remote-command
Ответ 6
В дополнение к ответу @signpolyma вам нужно будет добавить свой экспорт до этих строк
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac