почему бы bash не автоматически экспортировать PATH при назначении? - PullRequest
0 голосов
/ 30 ноября 2018

Мы обычно пишем в сценарии:

PATH="xxx"
export PATH

Я знаю, что PATH - это общая переменная в bash, тогда export вызывает setenv(), чтобы что-то сделать.

Но почему бы не bashэкспортировать PATH автоматически, когда PATH присваивается значение.

Есть ли случаи, когда кто-то хочет изменить переменную PATH без ее экспорта?Или какие-то другие причины?

1 Ответ

0 голосов
/ 30 ноября 2018

Ну, правда в том, что вы можете в вашей ситуации опустить инструкцию экспорта.Попробуйте: откройте подоболочку (набрав bash), затем установите переменную PATH на другое значение без ее экспорта, затем откройте другое (на этот раз набрав bash --norc, чтобы избежать возможных ошибок из .bashrc из-заизмененный путь), и сделайте echo $PATH.Вы увидите, что переменная PATH изменилась, даже если вы ее не экспортировали.

Причина, однако, не в том, что PATH каким-либо образом особенным (то есть экспортируется автоматически с помощью некоторой внутренней магии оболочки bash),Он экспортируется, потому что переменная, которую вы помечаете один раз для экспорта, помещается в среду - это то, что на самом деле означает «экспорт» - и, следовательно, наследуется всеми дочерними процессами.В случае PATH очень вероятно, что какой-то PATH уже установлен в / etc / profile, и, конечно, вы найдете export PATH в этом файле.Этот файл создается всякий раз, когда bash запускается как оболочка входа в систему и, следовательно, наследуется всеми другими процессами, порожденными из него.

Тем не менее, неплохо бы экспортировать PATH в ваши собственные точечные файлы, потому что ваш bash будетнезависимо от среды родительского процесса.В конце концов, можно построить пример, в котором интерактивная оболочка bash без входа в систему вызывается процессом, который не имеет PATH в своей среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...