Как проверить, какая команда принята?

9

У меня есть скрипт , названный foo.shв /usr/local/sbin. Кроме того, я использую другой сценарий с тем же именем. Хранится в /home/user/scripts.

Оба пути принадлежат PATH. Как я могу узнать, какой из этих скриптов выполняется при наборе текста foo.shв командной строке? Могу ли я повлиять на это?

значение NULL
источник

Ответы:

10

Несколько дней назад я остался доволен своим ответом. Я также знал, что whichкоманда не используется, чтобы проверить, существует ли команда. Теперь я не очень доволен своим ответом, и я ссылаюсь на этот замечательный ответ .


С помощью простой whichкоманды:

which foo.sh

Или typeкоманда:

type foo.sh

И вы можете влиять на это с помощью порядка путей в вашем $PATHили через абсолютный путь при запуске скрипта, например

/home/user/scripts/foo.sh

пример

Если PATH определяется как показано ниже

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

И вы запускаете скрипт или что-то еще, что находится внутри /usr/local/binи внутри /usr/binскрипта /usr/local/binкак более высокий приоритет.

AB
источник
1
Говоря о bashи zshесть также typeвстроенный; вместо этого, в zsh whichотличие от bash, является встроенным (и не /usr/bin/which)
Кос
@ Муру спасибо. Я немного об этом уже знал, но не в таких деталях. Я добавил свои взгляды к своему ответу. Еще раз спасибо.
AB