В чем разница между встроенной в unix командой `pwd` и ее переменной окружения $PWD?

StackOverflow https://stackoverflow.com/questions/4362643

  •  09-10-2019
  •  | 
  •  

Вопрос

Вот в чем дело.У меня есть вызов каталога :- %/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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top