Где находится команда чтения?

Я хотел найти команду read, поэтому я сделал:

$ which read

Возвращает статус выхода 1. Почему это происходит?

7
задан 3 July 2019 в 01:44

2 ответа

read это встроенная оболочка, а не внешняя команда. which говорит только о внешних командах. Предполагая, что вы используете Bash (или какую-то другую оболочку в стиле Bourne), вы обычно должны использовать type или command -v вместо which.

ek@Cord:~$ type read
read is a shell builtin

type и command сами являются встроенными оболочками и знают не только о внешних командах, но и о ключевых словах, встроенных функциях, псевдонимах и функциях. which - это внешняя команда, которая не знает об этих вещах; он знает только о внешних командах. Иногда which ничего не появляется, когда вы спрашиваете о команде, которую вы можете использовать в вашей оболочке. Иногда это что-то вызывает для команды, но это не то же самое , что , что на самом деле выполняется, когда вы используете команду в своей оболочке.

ek@Cord:~$ type type command which
type is a shell builtin
command is a shell builtin
which is /usr/bin/which

В Bash вы можете увидеть все текущие возможные значения команды, в порядке их пробования, с помощью type -a:

ek@Cord:~$ type -a read
read is a shell builtin
ek@Cord:~$ type -a echo
echo is a shell builtin
echo is /bin/echo

Для получения дополнительной информации о том, почему вы обычно Не следует использовать which, и что использовать вместо этого в различных оболочках, включая Bash, см. Почему бы не использовать «который»? Что использовать тогда?

15
ответ дан 3 July 2019 в 01:44

Если вы немного знаете, как работают UNIX и оболочка, из синтаксиса (read var1 var2 ...) должно быть очевидно, что ни одна внешняя программа не может установить локальную переменную оболочки, поэтому read должно встроен в оболочку.

В bash вы получаете не только код выхода 1, но и сообщение типа which: no read in (/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games). Это должно звучать как звонок, если read все еще найден, он должен быть встроен в оболочку.

0
ответ дан 3 July 2019 в 01:44

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

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