2013-08-14 5 views
1
[[email protected]_FEWS bin]# type cd 
cd is a shell builtin 
[[email protected]_FEWS bin]# which cd 
/usr/bin/which: no cd in (.:/usr/expect/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/real/RealPlayer:/root/bin) 

В ней говорится, что поскольку cd является встроенной командой, значит «cd» не удалось.О встроенной команде головоломка

'pwd' также является встроенной командой, почему 'which pwd' может получить свое местоположение?

[[email protected]_FEWS ~]# type pwd 
pwd is a shell builtin 
[[email protected]_FEWS ~]# which pwd 
/bin/pwd 
+0

В зависимости от вашей оболочки команды выполняются по-разному. Посмотрите на «man type», чтобы увидеть, как он реализован – KeepCalmAndCarryOn

ответ

1

Поймите, что для sudo или любой другой команды, которая не является встроенной в командный интерпретатор, когда команда завершается, оболочка улавливает, где она была прервана до того, как команда была запущена (конечно, текущий рабочий каталог вона оболочечных 't изменение). Таким образом, cd должен быть встроенной оболочкой; в противном случае, когда cd завершается, оболочка возвращается к тому же старому текущему рабочему каталогу. Другими словами, дочерний процесс (т. Е. Внешняя команда) не может изменить рабочий каталог родительского процесса (т. Е. Оболочки).

Предоставлено: https://bbs.archlinux.org/viewtopic.php?id=127225

0

команда компакт-диск команды в Bash. (Баш встроенная команда)

Вы можете найти использование компакт-дисков в «Человек Баш & находят кд»

Напротив, PWD является автономным команда.

0

Встроенные команды являются внутренними командами в оболочке и имеют более высокий приоритет над внешними командами (файлами). А встроенные команды также имеют более низкий приоритет, чем функции, так встроенный на самом деле полезно, если у вас есть функция с тем же именем, что и встроенная команда, как это:

function cd { 
    if [[ $# -gt 0 ]]; then 
     echo "Changing directory to $1." 
     builtin cd "$1" 
    else 
     echo "Changing to default directory." 
     builtin cd 
    fi 
} 

cd "/some/where" 

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

0

Существует несколько случаев дублирования «команд», но, конечно, это будет зависеть от вашей установки. Если у вас есть встроенная оболочка с именем pwd, то она будет использоваться, но могут быть оболочки (csh), которые не имеют pwd в качестве встроенного.

printf является оболочкой встроенной для bash и ksh93, но не для ksh88 или csh.

Другим (более сложным) примером является [, который является встроенной оболочкой, но (на некоторых системах) символической ссылкой на test (которая также может быть встроенной оболочкой).

Ваша установка для поддержки многих оболочек и других программ, а не только bash.

0

cd должен быть встроен в оболочку, поскольку это был отдельный процесс, тогда действие команды исчезло бы после завершения команды. (См ответ Шакти Кумара.)

С другой стороны, некоторые другие команды, такие как pwd, test доступны в бинарном виде, как /bin/pwd, /usr/bin/test ... Тем не менее, для оптимизации, оболочка имеет также реализация этих двоичных файлов внутри/бункером/bash, так что избежать накладных расходов на создание отдельного процесса.

при звонке pwd, оболочка вызывает свою собственную pwd осуществления. Вы можете вызвать двоичный код /bin/pwd, используя command pwd вместо pwd.

0

Такие команды, как pwd и echo, являются встроенными в bash, а также доступны в качестве внешних команд. Вы можете использовать enable, чтобы включить/отключить встроенные оболочки.

В следующем примере показано, как pwd может быть вызван либо как оболочка, либо как внешняя команда, то есть /bin/pwd.

$ type pwd 
pwd is a shell builtin 
$ which pwd 
/bin/pwd 
$ enable -n pwd 
$ type pwd 
pwd is /bin/pwd 
$ which pwd 
/bin/pwd 
$ enable pwd 
$ type pwd 
pwd is a shell builtin 
$ which pwd 
/bin/pwd 
Смежные вопросы