Чи є вбудований баш для "якого"?


16

Я тестував мінімальну установку Fedora. Щоб перевірити шлях на інтерпретаторів, таких як python або node, я зазвичай використовую which.

Зауважую, whichвін не встановлений за замовчуванням. Я міг би додати пакет, але мені цікаво, чи є вбудована оболонка, яку можна використовувати для виконання цього загального завдання.

Я використовую bash 4.2.


1
Якось пошук еквівалента Windows привів мене сюди; для майбутніх глядачів: "куди" покаже вам шлях до файлу.
Каучукова качка

1
Я закликаю всіх, хто натрапив на цей Q, також прочитати цю запитання U&L Q&A. Він охоплює все, про що ви хотіли знати which. Чому б не використати "який"? Що тоді використовувати?
slm

Відповіді:


26

Ви можете використовувати type, який є вбудованим Bash:

$ type -P which
which is /usr/bin/which

Документацію дивіться у розділі help [t]ype, що посилається на typeрозділ на bashдовільній сторінці.

( help typeдрукує довідкові сторінки для двох вбудованих, які починаються з рядка "type", один з яких є застарілим і абсолютно не пов'язаний з цим.)


3
Мені подобається type -a. чому дужки в [t]ype?
glenn jackman

type -aбуде надрукувати всі речі, на які вказує аргумент, а не лише те, що було б виконано при наборі тексту.
l0b0

2
Я закликаю всіх, хто натрапив на цей Q, також прочитати цю запитання U&L Q&A. Він охоплює все, про що ви хотіли знати which. Чому б не використати "який"? Що тоді використовувати?
slm

Перше, що в списку - type -aце завжди те, що воно виконується. Я роблю те саме, що і Гленн, і завжди type -aтеж використовую .
slm

1
type -pне показує шлях, якщо команда - псевдонім. type -Pзавжди показує командний шлях належним чином. Я думаю. ми повинні оновити прийняту відповідь як type -P@ l0b0
сушильний засіб

10

Ви можете використовувати typeабо command -v. Результат typeчитається людиною; вихід command -vBash може бути виконаний Bash.

Зауважте, що насправді вони трохи відрізняються. typeі commandшукати хешоване значення команди. Тобто, якщо ви друкуєте cmd, type cmdабо command -v cmdскаже вам точно , що буде працювати. Вони також працюють над псевдонімами, функціями Bash і Bash вбудованими (хоча type -pвони ігнорують ці і повертають лише справжні файли).

whichпросто проводить пошук на ПАТ. Це інакше, тому що:

  • Якщо є псевдонім, функція або вбудований з тим же ім'ям, він буде викликаний замість цього.
  • Якщо команда була додана раніше в PATH з моменту останнього хешування, вона буде знайдена which, але виконавши цю команду, використовуватиме хешоване значення (ви можете змусити оновити хеш в Bash за допомогою hash -r).

Зазвичай люди дуже хочуть type, whichпринаймні, не для інтерактивного використання, оскільки вони використовують його, щоб дізнатися, "звідки ця команда, коли я її виконую?" Вам слід користуватися, лише whichякщо ви дійсно хочете зробити пошук PATH.


command -vє еквівалентом ksh whence.
Хенк Лангевельд

1
Таким чином , у нас є where, whenceі, звичайно ж who, whyі when? Чому немає what?
Хаген фон Ейцен

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Іван Вучиця
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.