
Я установил rbenv, программу управления версиями ruby. Я посмотрел в файл .bashrc и заметил, что переменная path изменилась следующим образом:
export PATH="$HOME/.rbenv/bin:$PATH"
Я думаю, что часть ":$PATH" была включена, чтобы включить содержимое старого пути. Я хотел бы знать, что произойдет, если программа, которая изменяет переменную пути, не включит часть ":$PATH". Не смогу ли я запустить некоторые программы из командной строки, поскольку каталоги bin, в которых они находятся, больше не включены в новую переменную пути?
решение1
Вы правы. Поэтому сторонние пакеты должны только расширять текущий путь, а не ограничивать его.
решение2
PATH
— это разделенный двоеточием список каталогов, которые ваша оболочка ( bash
, fish
, ksh
, sh
, и т. д.) использует для поиска чего-либо для выполнения. Если первое слово строки, которую вы вводите в оболочку, не является встроенной командой или псевдонимом оболочки, оболочка проходит по списку каталогов в $PATH
, ища исполняемый файл с тем же именем, что и первое слово введенной вами команды.
command not found
Ошибки для общих команд ( da/media/w3/0123-4567/PODCASTS/2016-Nov-27/loe-wildlife-decline.mp3te
, ls
, ...) указывают на неправильно сформированный PATH
. Аварийная ситуация PATH
(достаточная для того, чтобы вы могли исправить проблему, может быть установлена с помощью export PATH=/usr/bin:/bin:/usr/local/bin:/snap/bin
.
Многие PATH
ошибки являются ошибками синтаксиса оболочки ( Spaceдо или после =
. То есть PATH=value
, без пробелов).
Что касается «повреждения пути», если я создал «специальную» версию ls
, сохраненную в /.evil/bin/ls
, И я могу повредить ваш путь так, что он будет иметь/.evil/bin
ДО /bin
, когда вы вводите ls
, оболочка будет запущена /.evil/bin/ls
вместо /bin/ls
. Хорошо известная ошибка, но к тому времени, как она станет полезной, ваша система будет полностью взломана.
решение3
Вы сможете их запустить, вам просто нужно будет указать полный путь. Изменение PATH
не изменяет связанные с ними разрешения.