У меня был исполняемый скрипт в моей Ubuntu, расположенный в каталоге ~/project/
, и я попытался добавить этот путь в /etc/environment
. Итак, я редактирую путь к этому PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/"
. Затем я выхожу и снова вхожу в систему, открываю терминал как su
и запускаю команду для выполнения моего скрипта в этой папке, но в результате получается command not found
.
Затем я изменяю путь в /etc/environment
на PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/r0xx4nne/project/"
и вуаля, он работает. Теперь я могу без проблем запустить исполняемый скрипт внутри ~/project/
по команде su
.
У меня вопрос, в чем разница между ~ / project и / home / r0xx4nne / project , когда речь идет о создании пути в / etc / environment ?
Почему так получилось? Я новичок, и я просто хочу знать больше. Спасибо за любой ответ.
Тильда обозначает домашний каталог текущего пользователя. Он может быть вашим или другим, в зависимости от того, когда он используется. Если вы еще не вошли в систему, это не сработает.
Связанная проблема заключается в том, что / etc не является вашим каталогом и не является местом для добавления ваших личных путей. Если бы был другой пользователь, зачем ему путь к вашему домашнему каталогу?
Правильное место для изменения пути зависит от того, кому нужен этот путь:
Только один пользователь (вы) - - $HOME/.profile
, где $ HOME - это / home / username
Все пользователи, кроме root - /etc/profile
root - /root/.profile
Итак, подведем итог , ваш путь должен быть установлен в /home/r0xx4nne/.profile
.
В оболочке ~/project/
расширяется до /home/yourusername/project
в большинстве случаев. Это называется разложение тильды .
Если вы положите
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/
(примечание, без кавычек) в ~/.profile
. Ваш PATH будет установлен правильно, потому что ~/.profile
интерпретируется оболочкой при входе в систему. /etc/environment
(и это зависит от пользователя ~/.pam_environment
) не интерпретируется оболочкой. Он читается модулем pam_env во время входа в систему, но он принимает только пары NAME=VALUE
и никакие расширения (например, $var
или ~/
или $(command)
и т. Д.) Не будут выполняться на VALUE
. ].
Когда вы входите как su, ~
- это /root
, а не /home/<yourusername>
. В остальном оба одинаковы.
Примечание: тильда раскрывается оболочкой (а не ls
) до фактического выполнения команды. Например, если вы запустите sudo ls ~
, команда, которая будет выполнена, будет ls /home/<yourusername>
, а не ls /root
. Чтобы запретить оболочке расширять тильду как пользователь без полномочий root, вы можете:
передать команду в качестве аргумента в оболочку и заставить оболочку работать от имени root:
sudo bash -c "ls ~"