Что происходит, когда эта команда выполняется?
PATH =$PATH:`pwd`
Ошибка: Ничего не происходит, когда я выполняю команду в терминале.
При выполнении команды в вопросе необходимо получить сообщение об ошибке:
$ 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
переменная.
Насколько Ваша исходная команда идет, ответ 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
сначала. Так порядок вопросов присвоения.