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