Почему $ PATH отличается при выполнении команд через S SH и libs sh? - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь запустить команду на удаленном хосте через libssh2, завернутую в ssh2 Rust crate .

Так что я хотел бы запустить команду cargo build , но когда я пытаюсь запустить его с помощью библиотеки libs sh, я получаю сообщение об ошибке:

cargo: command not found

Однако, когда я sh вхожу на сервер вручную из командной строки, все работает нормально.

Я заметил, что $PATH отличается при запуске s sh из командной строки и libs sh, а также:

, например, когда я echo $PATH

s sh дает мне:

/home/<user>/.cargo/bin:/usr/share/swift/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bi

, в то время как libs sh дает мне:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Похоже, происходит то, что изменения, сделанные в $PATH внутри .bashrc и .profile не делают этого при запуске через libs sh.

Я также получаю такое же поведение, если я запускаю /bin/bash -c "echo ${PATH}"

Почему это так? , и есть ли способ получить одинаковое поведение в обоих этих случаях?

1 Ответ

0 голосов
/ 27 апреля 2020

Пожалуйста, посмотрите на этот вопрос .

TL; DR Оболочка для входа сначала читает / etc / profile, а затем ~ / .bash_profile. Оболочка без регистрации читает из /etc/bash.bashrc, а затем ~ / .bashr c.

...