Проверить, существует ли программа из скрипта Fish

Как я могу проверить, существует ли программа в скрипте рыбы?

Я знаю, что с Bash не существует абсолютного решения, но использование if type PROGRAM >/dev/null 2>&1; then... дало хорошие результаты.

Есть что-то подобное с рыбой?


person azmeuk    schedule 16.03.2017    source источник


Ответы (1)


Есть type -q, как в

if type -q $program
     # do stuff
end

который возвращает 0, если что-то является функцией, встроенной или внешней программой (т.е. если это что-то, что будет выполнять рыба).

Также есть command -sq, который вернет 0, только если это внешняя программа.

Для обоих из них флаг «-q» заглушает весь вывод. Для команды "-s" заставляет просто искать команду, а не выполнять ее напрямую.

person faho    schedule 16.03.2017
comment
Хия фахо, это правильный способ проверить несколько исполняемых файлов в пути: if type -q tldr; and type -q peco; tldr $argv | peco; end; Или есть способ лучше? Может быть, сделать все за один раз, например. type -q tldr peco (в документации говорится, что мы можем указать несколько имен для type, но это не дает сбоя, когда я пытаюсь вернуть истину, например, type -q aaa bbb; and echo true он ничего не печатает, как ожидалось, но if type -q aaa bbb; echo true; end печатает true. Так в чем дело? - person user14492; 16.07.2021
comment
type -q возвращает истину, если существует хотя бы один из аргументов - type -q type slartibartfast будет успешным везде, потому что type всегда существует. Так что да, вам придется проверять отдельно. - person faho; 16.07.2021