Знайдіть файл на шляху без "якого"?


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.


Чи є assemble.shу вашому поточному каталозі?
Кіт

3
Можливо, це німе запитання, але чи це псевдонім (тобто, збирається чи збирається.sh, коли ви вводите команду alias ?
James McLeod

@JamesMcLeod Чудова здогадка! Це було моєю справою для acme.sh ( github.com/Neilpang/acme.sh ). Після встановлення був створений псевдонім acme.sh, і мені було цікаво, як називається acme.sh, незважаючи на те, що він не знаходиться у var PATH.
rlib

Відповіді:


17

Використовуйте цю команду: type assemble.sh

Він працює в різних оболонках і показує лише перший результат.


9
Або просто type assemble.sh, який є портативним (і показує лише першу відповідність, тоді як type -aконструкція ksh / bash для показу всіх збігів).
Жил "ТАК - перестань бути злим"

6

Або розділіть шлях і використовуйте його в пошуку - перша відповідність повинна бути рішенням

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

type це, звичайно, простіше.


2
Це досить корисно. Я не знав, що можу розділити $ PATH на її підкомпоненти та шукати кожен з нихfind
Ехтеш Чудхурі

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 надрукувати опис COMMAND, подібний до вбудованого типу

Також буде корисно, якщо ви хочете знайти в модифікованій версії PATHASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
nhed

0

Ви можете locate assemble.shзнайти місце розташування файлу.


Ні, це показує розташування всіх файлів, доступних для читання у світі, чиє ім’я міститься assemble.sh, що тут не має значення.
Жиль 'ТАК - перестань бути злим'

Це зовсім не має значення. Навіть якби у нього було декілька файлів, названих так, locateце також дало б йому місце, яке він хоче. assemble.shне таке поширене ім'я файлу, тому він, ймовірно, легко знайде файл (що вимагає ОП).
nico

1
Чи не потрібно, updatedbперш ніж locateпоказувати результати?
glenn jackman

1
Зазвичай updatedbвиконується щоденно як робота з кроном, але так, вам, можливо, доведеться примушувати його, якщо файл зовсім недавній.
nico
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.