Найти файл по пути без «который»?

12

Я (как-то) могу запустить скрипт:

$ assemble.sh file
... [output]

Но whichне могу найти это:

$ which assemble.sh
which: no assemble.sh in (/s/std/bin:/usr/afsws/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/usr/stat/bin:/usr/X11R6/bin:.
  1. Как это возможно?
  2. Как я могу найти, где находится этот файл?

Я использую Bash.

Xodarap
источник
Находится assemble.shв вашем текущем каталоге?
Кит
3
Возможно, глупый вопрос, но является ли он псевдонимом (то есть, появляется ли alias файл
Джеймс МакЛауд,
@JamesMcLeod Отличное предположение! Это был мой случай для acme.sh ( github.com/Neilpang/acme.sh ). После установки был создан псевдоним acme.sh, и мне было интересно, как вызывается acme.sh, несмотря на то, что он отсутствует в переменной PATH.
Rlib

Ответы:

17

Используйте эту команду: type assemble.sh

Работает в разных оболочках и показывает только первый результат.

Гленн Джекман
источник
9
Или просто type assemble.sh, который является переносимым (и показывает только первое совпадение, тогда как type -aявляется конструкцией ksh / bash, чтобы показать все совпадения).
Жиль "ТАК - перестань быть злым"
6

Или разделите путь, и используйте его в find - первое совпадение должно быть решением

find ${PATH//:/ } -maxdepth 1 -name assemble.sh -print -quit

type конечно проще.

Пользователь неизвестен
источник
2
Это довольно полезно. Я не знал, что смогу разбить $ PATH на его подкомпоненты и искать каждый с помощьюfind
Ehtesh Choudhury
1
Не пытался, но я думаю, что это может порваться с пробелами в компонентах PATH
nhed
4

Возможно, вы используете bash, но синтаксис whichвывода показывает, что вы используете старый, whichнаписанный на csh. Путь , показывает вверх , указанные в скобках, и каталоги в PATH есть записи , как /opt/SUNWspro/binи /usr/ccs/binкоторые имеют смысл только в Solaris. Это соответствует: Solaris использовал csh which.

Вот мое предположение: у вас есть один PATH для bash, а другой для csh. Это может быть системной проблемой. Насколько я помню, Solaris сохраняет файлы / etc / profile и / etc / cshrc для общесистемной настройки PATH. Эти два файла инициализации могут устанавливать разные переменные PATH для разных оболочек. Выполните «echo $ PATH» в bash и посмотрите, соответствует ли оно тому, что whichкоманда выводит в виде строки PATH.

Брюс Эдигер
источник
4
command -v assemble.sh

Информация

-v вывести описание КОМАНДЫ, аналогичное встроенному типу
Стивен Пенни
источник
Также было бы полезно, если вы хотите найти в модифицированной версии PATHASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
nhed
0

Вы можете использовать, locate assemble.shчтобы найти местоположение файла.

Nico
источник
Нет, это показывает расположение всех (мировых) читаемых файлов, чье имя содержит assemble.sh, что здесь не имеет значения.
Жиль "ТАК - перестань быть злым"
Это не имеет никакого отношения вообще. Даже если бы у него было несколько названных файлов, locateэто также дало бы ему местоположение того, что он хочет. assemble.shэто не очень распространенное имя файла, поэтому он, скорее всего, легко найдет файл (это то, что запрашивает OP).
Нико
1
Вы не должны , updatedbпрежде чем locateпоказаны результаты?
Гленн Джекман
1
Обычно updatedbзапускается ежедневно как задание cron, но, возможно, вам придется его принудительно запускать, если файл очень свежий.
Нико