How can I check if a program exists within a fish script?
I know that there is no absolute solution with Bash, but using if type PROGRAM >/dev/null 2>&1; then...
gave good results.
Is there something similar with fish?
There is type -q
, as in
if type -q $program
# do stuff
end
which returns 0 if something is a function, builtin or external program (i.e. if it is something fish will execute).
There is also
command -q
, which will return 0 only if it exists as an external programbuiltin -q
, which will return 0 only if it is a fish builtinfunctions -q
, which will return 0 only if it is a fish functionFor all of these the "-q" flag silences all output and just queries for existence.
If e.g. builtin -q
returns true, that just means it is also a builtin - it can still be a function or command as well.
command -q
works since fish 3.1.0 because the -q
flag implies -s
, before it would have to be command -sq
.