Существует ли способ, которым я могу использовать $PATH, как определено моим профилем удара?

Я провожу большую часть своего дня ssh'd в серверы. У меня есть серия псевдонимов/функций/сценариев, которые позволяют мне вводить p hostname от терминала и выполняют экран (1) GNU на удаленной стороне, с помощью следующей команды:

exec ssh hostname -t 'screen -RD'`

Я только недавно заметил это ssh -t не получает мое пользовательское $PATH. Вот некоторый терминальный вывод:

adam@workstation:~:0$ sh server 'echo $PATH'
/home/adam/bin:/usr/local/bin:/bin:/usr/bin:/opt/git/bin:/opt/git/libexec/git-core
adam@workstation:~:0$ ssh server -t 'echo $PATH'
/usr/local/bin:/bin:/usr/bin
Connection to uranus.plymouth.edu closed.

Моей самой большой проблемой являются мои пользовательские псевдонимы, только пытаются выполниться screen, так как я не могу гарантировать полный путь и мой $PATH структурирован так, оболочка должна найти корректный. Если мой $PATH настройки не соблюдают, мои сценарии не работают. Есть ли способ, которым я могу использовать $PATH как определено моим .bashrc/.bash_profile?

Я верю PermitUserEnvironment отключен.

3
задан 16.02.2010, 16:35

4 ответа

Если можно изменить команду использование псевдонимов, у Вас может быть удаленная сторона, создают “интерактивный”, экземпляр “входа в систему” удара (т.е. тот, который использует Ваш .bashrc и .bash_profile) выполнять экран:

ssh server -t 'exec bash -ilc "exec screen -RD"'

Если кроме того, Вы не получаете свою нормальную среду (ПУТЬ, окружите настройки, и т.д.) в оболочках, созданных в экране, Вы, возможно, должны были бы сказать экрану создавать оболочки “входа в систему”. Поместить shell -bash в Вашем .screenrc на удаленных концах, или добавляют -s -bash к Вашему экранному вызову:

ssh server -t 'exec bash -ilc "exec screen -RDs -bash"'

Это, конечно, выполнит Ваш .bash_profile дважды (однажды экран, однажды для каждой оболочки, созданной в экране). В зависимости от того, как Вы делаете свои манипуляции ПУТЕМ, это может привести к нескольким копиям тех же дополнений к Вашему ПУТИ (это обычно - не проблема).

1
ответ дан 08.12.2019, 02:23

Ваш пользовательский $PATH, вероятно, установлен в .bashrc, который выходит при выполнении под pseudo-tty средой ssh -t ....

У меня нет прямого опыта с этим, но я держал пари, осматриваете ли Вы .bashrc, Вы будете видеть, что он выходит, если $PS1 не установлен, или [-t 1] сбои или что-то как этот, прежде, чем установить $PATH. И если Вы будете экспериментировать, то Вы, вероятно, найдете это ssh server 'try_that_test' и ssh server -t 'try_that_test' дайте различные результаты.

Вероятно, можно зафиксировать его путем создания теста более сложным, чтобы проверить, работаете ли Вы под ssh.

0
ответ дан 08.12.2019, 02:23

.bashrc и .bash_profile только обрабатываются для интерактивных оболочек, который любая оболочка, которая выполняет программу такой как screen (или echo в тестовых сценариях), не. Читайте в странице справочника удара о BASH_ENV переменная среды, которая может быть настроена для выполнения скрипта запуска для неинтерактивных оболочек.

0
ответ дан 08.12.2019, 02:23

Можно хотеть использовать ~/.ssh/rc или ~/.ssh/environment также. Посмотрите sshd(8) страница справочника.

0
ответ дан 08.12.2019, 02:23

Теги

Похожие вопросы