Кажется, я не могу установить новый $ PATH, чтобы он использовался при выполнении команд через ssh user@host command
. Я попытался добавить export PATH=$PATH:$HOME/new_path
в ~ / .bashrc и ~ / .profile на удаленном компьютере, но выполнение ssh user@host "echo \$PATH"
показывает, что изменение не было получено (отображается / usr / local / sbin: / usr / local / bin: / usr / SBIN: / USR / бен: / SBIN: / бен: / USR / игры). На удаленном компьютере работает Ubuntu 8.04.
Я уверен, что могу взломать его в / etc / profile, но это не чистое решение, и оно работает только при наличии root-доступа.
export PATH=$PATH:$HOME/new_path
как в ~ / .bash_login, так и в ~ / .bash_profile (в дополнение к ранее опробованным ~ / .bashrc и ~ / .profile). Ни то, ни другое не работает. В обоих случаях мне пришлось создать файл.Ответы:
Как сказал grawity, ~ / .bashrc - это то, что вам нужно, поскольку он получен из неинтерактивных оболочек без входа в систему.
Я полагаю, что проблема, с которой вы столкнулись, связана с файлом Ubuntu по умолчанию ~ / .bashrc. Обычно это начинается примерно так:
Перед этой строкой вы хотите указать что-нибудь для неинтерактивных оболочек .
источник
export PATH=$PATH:$HOME/new_path
строку выше, и это сработало. Спасибо!.zshenv
пользователях zsh, мне потребовалось довольно много времени, чтобы найти его в комментариях к другим ответамУ вас есть
~/.bash_login
или~/.bash_profile
?Bash в интерактивном режиме проверяет эти файлы и использует первый из существующих в следующем порядке:
~/.bash_profile
~/.bash_login
~/.profile
Так что если у вас есть
~/.bash_profile
, то любые изменения, которые вы сделаете,~/.profile
останутся незамеченными.Bash в неинтерактивном режиме иногда читает файл
~/.bashrc
(который также часто является источником из интерактивных скриптов). Под «иногда» я подразумеваю, что он зависит от дистрибутива: как ни странно, есть параметр времени компиляции для включения этого , Debian разрешает~/.bashrc
чтение, а, например, Arch - нет.ssh
похоже, использует неинтерактивный режим,так~/.bashrc
должно хватить. Когда возникают подобные проблемы, я обычно добавляю несколько эхо, чтобы увидеть, какие файлы запускаются.источник
~/.bashrc
»? Я не вижу этого утверждения на странице руководства. Спасибо~/.bashrc
, кажется, что вам нужно дополнительно установить переменную средыBASH_ENV
; см. superuser.com/a/585699/100843 . Для неинтерактивных оболочек входа вам, вероятно, придется изменить один из трех сценариев запуска, которые вы упомянули..zshenv
.zshenv
всегда; неважно, интерактивный он или нет.В документации по ssh говорится:
вот почему добавление в файлы bashrc не работает. Однако у вас есть следующие варианты:
Если
PermitUserEnvironment
параметр установлен в конфигурации sshd, вы можете добавить свой параметр PATH в~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
источник
man sshd_config
говорит, что он отключен по умолчанию, поэтому маловероятно, что это решение сработает для большинства людей. 2. Это сработает, но я не могу легко изменить команду, отправленную по ssh (см. Второй комментарий к моему вопросу).Вы всегда можете сказать:
источник
В дополнение к ответу @signpolyma вам нужно будет добавить свой экспорт перед этими строками
источник
У меня была такая же проблема, я решил ее:
источник