Я использую эту pathto
функции для переносимости всех оболочек Bourne наследия (я не использую which
, потому что это не в POSIX поэтому его выходной формат не определен, и он жалуется, когда ничего не найдено, а не молчать):
pathto() {
DIRLIST=`echo $PATH|tr : ' '`
for e in "[email protected]"; do
for d in $DIRLIST; do
test -f "$d/$e" -a -x "$d/$e" && echo "$d/$e"
done
done
}
который вторит имя пути для любого исполняемого файла данного, когда нашел, наряду с
test "`pathto less`" != "" && alias more=less
Что касается производительности, то вы не должны заботиться, потому что количество раз вы называете pathto
ничтожно. В ваших первых двух примерах используются не переносные конструкции (())
и [[ ]]
, и их следует избегать.
Обратите также внимание на то, что я не имею дело с пустыми частями в PATH
. Из соображений безопасности их следует избегать, как и .
.
Красивый и чистый. В основном отвечаю на мой вопрос. – user3341592
Боковой вопрос: лучше использовать '' 'type ag> &/dev/null''' или просто' '' type ag>/dev/null''' (как вы это делаете)? – user3341592
Первый не переносится. Если вы хотите перенаправить stderr, это '2>/dev/null' или'>/dev/null 2> & 1' для обоих stdout и stderr. – tripleee