Обычный пользователь может запустить этот скрипт, но корень не может найти его.
У меня есть простой сценарий, в котором я сохранил ~/bin
. Я обновил .profile
файл для включения этой папки в ПУТЬ. Я могу войти в терминал, работать в любом каталоге, ввести имя сценария, и это хорошо работает. Но если в том терминале я переключаюсь на корень, сценарий не может быть найден. Я предполагаю, что существует некоторый файл где-нибудь, которому нужно новое обновление $PATH, но я не знаю который.
Если Вы используете sudo
, который, вероятно, имеет место, существует политика безопасности, которая изменяет переменную среды $PATH к безопасный путь (определенный в файле /etc/sudoers ). ~ / мусорное ведро каталог не включен в значение по умолчанию набор secure_path в файл sudoers , так выполнение sudo script
не работало бы, но sudo ~/bin/script
будет.
можно поместить сценарий в одну из папок, определенных в конфигурационный файл sudoers (т.е. /usr/local/bin) для создания этого непосредственно доступным. secure_path может также быть изменен на конфигурационном файле, хотя он не рекомендуется.
Как другие сказали, priviledged среда не является тем же как средой пользователя, и на серьезных основаниях. Существует главным образом два решения: (i) назовите свои сценарии с их путем, или (ii) показанный Ваши сценарии, чтобы базироваться и переместить их выше в файловую иерархию (говорят,/usr/custom/bin, но безотносительно работ), затем обновите ПУТЬ пользователя, вместо того, чтобы пытаться сделать обратное.
Временно предотвратить sudo
от сброса Вашего пути к secure_path
, для единственной команды, не изменяя глобальной конфигурации, можно сделать:
sudo env PATH=$PATH command
Где command
название исполняемого файла, который Вы хотите выполнить, который находится в Вашем PATH
.
Вы могли сделать псевдоним для этого и добавить к Вашему собственному (не корень) ~/.bashrc
... что-то как
alias sudo2='sudo env PATH=$PATH'
Затем Вы могли использовать sudo2 command
выполнять исполняемый файл с sudo
использование собственного ПУТИ.
Почему сценарий перестал работать, когда выполнено корнем?
Необходимо проверить путь эффективного пользователя... в этом случае root
.
Выполнение это:
(Первые две строки являются подсказками плюс команды. Последняя строка является выводом команды.)
$ sudo su -
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Рекомендации для того, куда поместить Ваш сценарий, который будет выполнен другими:
Сделайте подкаталог под /opt
для Вашего проекта и места исполнительные сценарии Вашего проекта там. Это - место, которое переживет ОС новая установка на том же разделе (минус форматирование, конечно).
Корневая область для Ваших сценариев может быть в:
/opt/myprojectname/myscriptfiles/
Теперь можно связать сценарии /usr/local/bin/
с
$ sudo ln -s /opt/myprojectname/myscriptfile/myscript.sh /usr/local/bin/myscript.sh`
Вы не должны будете изменяться root
Переменная $PATH, потому что, как Вы видите от теста выше, это уже там.
Так вместо того, чтобы изменить корневой путь, можно изменить путь к поиску /opt/myprojectname/myscriptname
С другой стороны, Вы могли связать Ваш ~/bin/myscript.sh
кому: /usr/local/bin/myscript.sh
.