В чем разница между встроенной в unix командой `pwd` и ее переменной окружения $PWD?
Вопрос
Вот в чем дело.У меня есть вызов каталога :- %/home/myname/
Я создал программную ссылку в этом каталоге:- %cd /home/мое имя/ %ln -s /home/others/ .
Теперь я подключаюсь к другим/ из /home/myname/ Вот интересная часть.
Когда я делал встроенный в unix pwd
команда, я получаю ИСХОДНОЕ имя пути:-
%/home/others/
Но когда я повторяю переменную среды $ PWD, я получаю путь к ссылке:- %/home/myname/others/
Почему это так?
Решение
/var# ls -l lrwxrwxrwx 1 root root 10 Aug 22 13:21 mail -> spool/mail drwxr-xr-x 2 root root 4096 Jul 1 20:58 opt drwxr-xr-x 22 root root 4096 Dec 5 17:38 run drwxr-xr-x 12 root root 4096 Aug 22 13:21 spool drwxrwxrwt 14 root root 4096 Dec 6 02:46 tmp /var# cd mail /var/mail# echo $PWD /var/mail /var/mail# pwd /var/mail /var/mail# /bin/pwd /var/spool/mail
Другими словами, используя $PWD
этого достаточно, потому что pwd
в любом случае, это может не дать вам лучших результатов (для любого определения слова "лучше").
Почему это так? /bin/pwd
использует специфичные для операционной системы вызовы для определения текущего рабочего каталога, а в случае Linux ядро сохраняет только разрешенный каталог (см. /proc/self/cwd
), тогда как pwd оболочки содержат то, в чем, по мнению оболочки, оно находится.
Другие советы
Разница между /bin/pwd
внешняя команда и встроенные встроенные в том, что внешняя команда не знает, какой набор cd
Операции доставили вас туда и поэтому не притворяются, что ваш текущий каталог находится где-то в цепочке SymLinks; Это дает вам прямой путь от root до вашего текущего каталога, скорее как realpath()
Функция бы.
Видеть set -o physical
в bash
.