$PATH PATH=:'pwd' - Что происходит, когда эта команда выполняется?

Что происходит, когда эта команда выполняется?

PATH =$PATH:`pwd`

Ошибка: Ничего не происходит, когда я выполняю команду в терминале.

5
задан 19 May 2018 в 11:31

2 ответа

При выполнении команды в вопросе необходимо получить сообщение об ошибке:

$ PATH =$PATH:`pwd`
bash: PATH: command not found

Если пространство является опечаткой, и Вы на самом деле выполняете это:

PATH=$PATH:`pwd`

Затем это добавит текущий каталог (pwd команда, которая печатает путь текущего каталога, и `pwd` будет заменен выводом pwd) к PATH переменная на время Вашей текущей сессии оболочки (util Вы закрывают терминал). Проиллюстрировать:

$ pwd
/home/terdon/foo  ## I am in /home/terdon/foo

$ echo $PATH ## the current PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

$ PATH=$PATH:`pwd`
$ echo $PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/terdon/foo

Отметьте как текущий каталог, /home/terdon/foo был добавлен в конец PATH переменная.

16
ответ дан 23 November 2019 в 08:40

Ошибка

Насколько Ваша исходная команда идет, ответ terdon уже касается очень хорошо, что происходит и что должно произойти. Давайте проанализируем это немного более подробно.

То, что Вы пытаетесь сделать, является переменным присвоением, которое должно принять форму:

varName=value

Однако из-за пространства это рассматривают как команду PATH с параметром командной строки, состоящим из a = затем содержание переменной $PATH и замена команды pwd, все присоединились к той же строке:

PATH =$PATH:`pwd`

Конечно, нет такой команды как PATH, следовательно Вы получите ошибку.

Shell рассматривает простые команды и их аргументы как список одного или нескольких разделенных пробелом маркеров (с, возможно, дополнительным переменным присвоением перед этим). Другими словами, форма должна быть:

[VAR=value] word [arg1 [arg2 [arg3] ]...]

Конечно, это не то, что желаемо в этом случае.

Надлежащая команда

Таким образом, то, что должно было быть сделано, является этим:

PATH=$PATH:`pwd`    

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

Несколько ключевых наблюдений:

  • Так как это - переменное присвоение, Вы не должны заключать в кавычки $PATH переменная, но обычно Вы должны для предотвращения нежелательного поведения. Посмотрите, Когда удвоит Необходимое Заключение в кавычки
  • форма обратных галочек замен команды не рекомендуется в наше время. В данном случае это в порядке, но в общих обратных галочках не предоставляют себя приятно вложенным и многострочным командам.
  • PATH переменная используется оболочкой для нахождения команд, и порядок каталогов в том списке устанавливает приоритет туда, где команды искались бы. Так, например, при выполнении команды, оболочка сначала проверила бы, встроена ли команда, если бы это не затем, она просмотрела бы все каталоги на PATH переменная. PATH=$PATH:$(pwd) заставил бы оболочку пересечь все остальное и только затем добраться до каталога, которым дали pwd. В отличие от этого, PATH=$(pwd):$PATH запустил бы поиск с каталога, возвращенного pwd сначала. Так порядок вопросов присвоения.
2
ответ дан 23 November 2019 в 08:40

Другие вопросы по тегам:

Похожие вопросы: