На этот вопрос уже есть ответ:
Я использовал , который
, чтобы указать местоположение исполняемого файла. Например, which pwd
возвращает / bin / pwd
. Однако я обнаружил , псевдоним
или , который compgen
и т. Д. Ничего не возвращает.
Что такое команды вроде псевдонима
? Разве это не исполняемые файлы в моем Linux? Я использую bash 4.3 на Ubuntu.
Я нашел
which alias
илиwhich compgen
и т.д. возвраты ничто.
Оба из тех являются оболочкой builtins. which
не знает ничего из оболочки builtins: это просто ищет путь исполняемые файлы.
Для более надежного результата использовать type
.
$ type compgen
compgen is a shell builtin
$ type alias
alias is a shell builtin
type
имеет лучшее знание того, что выполняется, потому что это - встроенная оболочка.
which
ненадежноwhich
часто дает неправильный ответ. Наблюдайте:
$ type pwd
pwd is a shell builtin
$ which pwd
/bin/pwd
Когда Вы работаете pwd
, не указывая явный путь, оболочка выполнит свое встроенное, не исполняемый файл это which
найденный.
Вот больше примеров which
предоставление неправильного ответа:
$ type echo
echo is a shell builtin
$ which echo
/bin/echo
$ type [
[ is a shell builtin
$ which [
/usr/bin/[
Наблюдайте:
$ type /bin/echo
/bin/echo is /bin/echo
Когда Вы даете явный путь для echo
, такой как /bin/echo
, затем оболочка выполнила бы тот исполняемый файл, не его встроенное. type
знает, что также, поскольку Вы видите выше.
which
работы внутреннеВ подобных debian системах, which
простой сценарий оболочки, соответствующая часть которого:
for ELEMENT in $PATH; do
if [ -z "$ELEMENT" ]; then
ELEMENT=.
fi
if [ -f "$ELEMENT/$PROGRAM" ] && [ -x "$ELEMENT/$PROGRAM" ]; then
puts "$ELEMENT/$PROGRAM"
RET=0
[ "$ALLMATCHES" -eq 1 ] || break
fi
done
Как Вы видите, это делает простой поиск вдоль ПУТИ для исполняемого файла данного имени.
Я думаю, что это вызвано тем, что нет программы/файла, названной alias
или compgen
и т.д. Они могут быть всего keywords
, что Bash как интерпретатор языка знает.
можно думать, что Bash является программой, и alias
просто название метода в той программе.