Тест Shell, чтобы увидеть, находится ли двоичный файл на вашем пути - PullRequest
4 голосов
/ 27 апреля 2011

В csh, tcsh, bash, perl (и т. Д.) Вы можете выполнять тесты наравне с (необязательно с тем же синтаксисом):

test -e PATH; # Does PATH exist
test -f PATH; # Is PATH a file
test -d PATH; # is PATh a directory
...

Существует ли аналогичная конструкция для проверки, является ли двоичный файлна вашем пути?(и, возможно, существует ли псевдоним или даже встроенный)

Очевидно, что это можно сделать с помощью чего-то вида:

#!/usr/bin/env bash
C=COMMAND;
test $(which $C) -o $(alias $C) && "$C exists"

или чего-то подобного в других языках оболочек / сценариев.

Вопрос не в том, можно ли проверить наличие программы, команды и т. Д. Вопрос в том, существует встроенный тест или нет.

Ответы [ 3 ]

7 голосов
/ 27 апреля 2011

Технически, если вы просто ищете вещи в текущем PATH, тогда единственное реальное решение - это первая часть вашего второго блока кода:

which $C

which единственный, который действительно соответствует вашему фактическому требованию в текущем PATH, так как whereis будет искать вне пути:

whereis ... попыткинайти нужную программу в списке стандартных мест Linux.

из whereis(1)

и alias, конечно, не имеет ничего общего с реальнымисполняемые файлы, а скорее команды с псевдонимами в вашей оболочке.

3 голосов
/ 28 апреля 2011

Или просто:

type -P awk   # returns the first matched binary called 'awk' in current PATH
2 голосов
/ 28 апреля 2011

Альтернативное решение -

find $(echo $PATH|tr : \ ) -maxdepth 0 -executable -name Executable

Где исполняемый файл - это имя требуемого приложения. Например:

find $(echo $PATH|tr : \ ) -maxdepth 0 -executable -name awk

возвращает

/usr/bin/awk
/bin/awk
...