¿Encontrar un archivo en la ruta sin "que"?

12

Soy (de alguna manera) capaz de ejecutar un script:

$ assemble.sh file
... [output]

Pero whichno puedo encontrarlo:

$ 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. ¿Cómo es esto posible?
  2. ¿Cómo puedo encontrar dónde está este archivo?

Estoy usando bash

Xodarap
fuente
¿Está assemble.shen su directorio actual?
Keith
3
Probablemente sea una pregunta tonta, pero ¿es un alias (es decir, aparece assemble.sh cuando escribe el comando alias ?)
James McLeod
@JamesMcLeod ¡Gran suposición! Fue mi caso para acme.sh ( github.com/Neilpang/acme.sh ). Después de la instalación, se creó el alias acme.sh y me pregunté cómo se llama acme.sh a pesar de no estar en PATH var.
rlib

Respuestas:

17

Usa este comando: type assemble.sh

Funciona en una variedad de conchas y muestra solo el primer resultado.

Glenn Jackman
fuente
99
O simplemente type assemble.sh, que es portátil (y solo muestra la primera coincidencia, mientras que type -aes una construcción ksh / bash para mostrar todas las coincidencias).
Gilles 'SO- deja de ser malo'
6

O divida el camino y úselo en find: la primera coincidencia debería ser la solución

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

type Por supuesto, es más fácil.

usuario desconocido
fuente
2
Esto es bastante útil. No sabía que podía dividir $ PATH en sus subcomponentes y buscar en cada uno de ellosfind
Ehtesh Choudhury
1
No lo intenté, pero supongo que esto puede romperse con espacios en los componentes de RUTA
nhed
4

Puede estar usando bash, pero la sintaxis de la whichsalida muestra que usa el antiguo whichescrito en csh. La RUTA aparece entre paréntesis, y los directorios en RUTA tienen entradas como /opt/SUNWspro/biny /usr/ccs/binque solo tienen sentido en Solaris. Eso es consistente: Solaris usó el csh which.

Aquí está mi suposición: tienes una RUTA para bash y otra para csh. Esto podría ser un problema del sistema. Como recuerdo, Solaris mantiene los archivos / etc / profile y / etc / cshrc para la configuración de la RUTA en todo el sistema. Esos dos archivos de inicialización pueden establecer diferentes variables PATH para diferentes shells. Haga "echo $ PATH" debajo de bash, y vea si está de acuerdo con lo que el whichcomando imprime como una cadena PATH.

Bruce Ediger
fuente
4
command -v assemble.sh

Informacion

-v imprime una descripción de COMMAND similar al 'type' incorporado
Steven Penny
fuente
También sería útil si desea encontrar en una versión modificada de PATHASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
nhed
0

Puede usar locate assemble.shpara encontrar la ubicación del archivo.

nico
fuente
No, esto muestra la ubicación de todos los archivos legibles (mundiales) cuyo nombre contiene assemble.sh, lo cual es irrelevante aquí.
Gilles 'SO- deja de ser malvado'
No es irrelevante en absoluto. Incluso si tuviera varios archivos llamados así locate, también le daría la ubicación del que desea. assemble.shno es un nombre de archivo tan común, por lo que probablemente encontrará el archivo fácilmente (que es lo que solicita el OP).
Nico
1
¿No tienes que mostrar resultados updatedbantes locate?
Glenn Jackman
1
Por updatedblo general, se ejecuta diariamente como un trabajo cron, pero sí, es posible que deba forzarlo si el archivo es muy reciente.
Nico