2

Является ли тест встроенной или актуальной программой?

bruce@Bruce:~$ type -a test
test is a shell builtin
test is /usr/bin/test
bruce@Bruce:~$

bruce@Bruce:~$ file /usr/bin/test
/usr/bin/test: ELF 64-bit LSB executable
bruce@Bruce:~$ 

Моя система работает под управлением Ubuntu 13.04 и BASH 4.2.45(1).

4 ответа4

7

Кажется, я не понял твой вопрос о моем первом подходе. Попробую объяснить это дальше ...

Хотя программный test является частью пакета GNU coreutils и поэтому будет поставляться с любой системой GNU/Linux, он также компилируется как встроенный в bash в большинстве дистрибутивов. Я предполагаю, что это должно улучшить производительность, так как не нужно запускать дочерний процесс для каждого условного оператора. Само собой разумеется, что оболочка будет использовать встроенную функцию в пользу двоичного файла, если оба присутствуют в системе. Но вы можете позвонить:

/usr/bin/test ...

... если вы хотите явно вызвать двоичный файл.

Также обратите внимание, что bash - не единственная оболочка в большинстве систем, и другие оболочки могут не иметь этой встроенной функции (например, dash ). Также есть системы, которые могут даже не иметь установленного bash . Для таких ситуаций есть бинарный файл из coreutils.


Вполне вероятно, что это встроенный в вашей системе. Чтобы проверить этот тип:

help test

Если вы видите страницу справки, это встроенная

Также вы можете ввести:

type -t test

Это показывает:

builtin 

в моей системе

1

test - это виртуальная команда внутри bash или то, что вы можете назвать builtin . /usr/bin/test существует так же, как и внешняя command . Наряду со встроенными командами и командами есть также functions которые вы можете рассматривать как пользовательские встроенные функции. Приоритет того, как они вызываются, следующие: сначала функции, вторые встроенные функции, внешние двоичные файлы или последние команды; но вы можете настроить это.

Если вы каким - то образом сделал функцию , которая имеет такое же имя , как , например , встроено cd чтобы пропустить вызов функции и вызова встроенной cd - диск вместо этого, вы можете использовать встроенную команду builtin например builtin cd args

Аналогично, если у вас есть встроенное имя, которое имеет то же имя, что и команда, хранящаяся в файловой системе, например test , для вызова команды test вместо этого, либо вы даете явный путь, например /usr/bin/test либо используете команду встроенной command например command test -n xyz .

Чтобы получить больше представления об этом, попробуйте выполнить следующие команды:

help
help builtin
help command
1

Исторически test (и его синоним [) были (и остаются) внешними программами. Но большинство оболочек предоставляют их как встроенные команды для повышения эффективности. То же самое верно для общих команд, таких как true , false , printf , echo и т.д.

0

В дополнение к предыдущим ответам можно использовать встроенную команду enable чтобы включить [или отключить] встроенную версию данной команды cmd (например, test) с помощью enable [-n] cmd . Документация о enable принимает в качестве примера на моей системе именно test .

enable -a показывает список встроенных команд и их состояние активации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .