Trova un file nel percorso senza "quale"?


12

Sono (in qualche modo) in grado di eseguire uno script:

$ assemble.sh file
... [output]

Ma whichnon riesco a trovarlo:

$ 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. Com'è possibile?
  2. Come posso trovare dove si trova questo file?

Sto usando bash.


È assemble.shnella tua directory corrente?
Keith,

3
Probabilmente una domanda stupida, ma è un alias (cioè assemble.sh compare quando si digita il comando alias ?
James McLeod

@JamesMcLeod Ottima supposizione! È stato il mio caso per acme.sh ( github.com/Neilpang/acme.sh ). Dopo l'installazione, è stato creato l'alias acme.sh e mi chiedevo come viene chiamato acme.sh nonostante non sia in PATH var.
rlib,

Risposte:


17

Usa questo comando: type assemble.sh

Funziona in una varietà di conchiglie e mostra solo il primo risultato.


9
O semplicemente type assemble.sh, che è portatile (e mostra solo la prima corrispondenza mentre type -aè un costrutto ksh / bash per mostrare tutte le partite).
Gilles 'SO-smetti di essere malvagio' il

6

Oppure dividi il percorso e utilizzalo nella ricerca: la prima corrispondenza dovrebbe essere la soluzione

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

type è ovviamente più facile.


2
Questo è abbastanza utile. Non sapevo che avrei potuto dividere $ PATH nei suoi componenti secondari e cercare ognuno confind
Ehtesh Choudhury,

1
Non ci ho provato ma immagino che questo possa rompersi con spazi nei componenti di PATH
nhed

4

Forse stai usando bash, ma la sintassi whichdell'output mostra che usi il vecchio whichscritto in csh. Il PERCORSO appare tra parentesi e le directory in PERCORSO hanno voci simili /opt/SUNWspro/bine /usr/ccs/binche hanno senso solo in Solaris. È coerente: Solaris ha usato il csh which.

Ecco la mia ipotesi: hai un PERCORSO per bash e un altro per csh. Questo potrebbe essere un problema di sistema. Come ricordo, Solaris mantiene i file / etc / profile e / etc / cshrc per l'impostazione PATH a livello di sistema. Questi due file di inizializzazione potrebbero impostare variabili PATH diverse per shell diverse. Fai "echo $ PATH" sotto bash e vedi se è d'accordo con ciò che il whichcomando stampa come una stringa PATH.


4
command -v assemble.sh

Informazioni

-v stampa una descrizione di COMANDO simile al built-in `type '

Sarebbe anche utile se si desidera trovare in una versione modificata di PATHASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
nhed

0

È possibile utilizzare locate assemble.shper trovare la posizione del file.


No, mostra la posizione di tutti i file leggibili (nel mondo) il cui nome contiene assemble.sh, il che è irrilevante qui.
Gilles 'SO-smetti di essere malvagio' il

Non è affatto irrilevante. Anche se avesse più file chiamati in quel modo gli locateavrebbe anche dato la posizione di quello che voleva. assemble.shnon è un nome di file così comune, quindi probabilmente troverà facilmente il file (che è ciò che l'OP richiede).
nico,

1
Non è necessario updatedbprima di locatemostrare i risultati?
Glenn Jackman,

1
Di solito updatedbviene eseguito quotidianamente come cron job, ma sì, potrebbe essere necessario forzarlo se il file è molto recente.
nico,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.