Использовать type commandname
. Это возвращает true если commandname
что-либо исполняемый файл: псевдоним, функция, встроенная или внешняя команда (искавший в $PATH
). С другой стороны, используйте command commandname
который возвращает true если commandname
встроенная или внешняя команда (искавший в $PATH
).
exists () {
type "$1" >/dev/null 2>/dev/null
}
Существует несколько sh вариантов (определенно предPOSIX; я знаю о /bin/sh
под OSF1 ≤3.x и некоторыми версиями оболочки Almquist, найденной в ранних версиях NetBSD и нескольких дистрибутивах Linux 20-го века), где type
всегда возвраты 0 или не существуют. Я не думаю никакие системы, поставленные с ними это тысячелетие. Если Вы когда-либо встречаетесь с ними, вот функция, которую можно использовать для поиска в $PATH
вручную:
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
Эта функция обычно полезна, если Вы хотите исключить созданный-ins и функции и искать имя в $PATH
. Большинство оболочек имеет встроенное для этого, command -v
, хотя это - относительно недавнее дополнение к POSIX (все еще дополнительный с POSIX:2004). Это - в основном благоприятная для программиста версия type
: это печатает полный путь для исполняемого файла в $PATH
, пустое название встроенного или функции и определения псевдонима для псевдонима.
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
Ksh, удар и zsh также имеют type -p
искать только исполняемые файлы в $PATH
. Обратите внимание на это в ударе, статусе возврата type -p foo
0 если foo
встроенное или функция; если Вы хотите протестировать на исполняемый файл в $PATH
, необходимо проверить, что вывод не пуст. type -p
не находится в POSIX; например, пепел Debian (который является /bin/sh
на Ubuntu), не имеет его.
Это на самом деле нормально, если у Вас нет a xinitrc
с командой для запуска менеджера окон (или любое приложение для GUI). Можно также сказать startx, что это должно выполнить непосредственно из командной строки:
startx `which xterm`
запустит сессию Xorg с xterm окном. можно выполнить материал от него, если Вы хотите :) Но лучшая установка и использование менеджер окон.