Encontre um arquivo no caminho sem "qual"?


12

Eu sou (de alguma forma) capaz de executar um script:

$ assemble.sh file
... [output]

Mas whichnão consegue encontrar:

$ 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. Como isso é possível?
  2. Como posso encontrar onde está esse arquivo?

Estou usando o bash.


Está assemble.shno seu diretório atual?
Keith

3
Provavelmente uma pergunta idiota, mas é um alias (ou seja, não assemble.sh aparecer quando você digitar o comando alias ?
James McLeod

@JamesMcLeod Great guess! Foi o meu caso do acme.sh ( github.com/Neilpang/acme.sh ). Após a instalação, o alias acme.sh foi criado e eu me perguntei como o acme.sh é chamado, apesar de não estar no PATH var.
Rlib # 16/17

Respostas:


17

Use este comando: type assemble.sh

Ele funciona em uma variedade de conchas e mostra apenas o primeiro resultado.


9
Ou apenas type assemble.sh, que é portátil (e mostra apenas a primeira correspondência, enquanto type -aé uma construção ksh / bash para mostrar todas as correspondências).
Gilles 'SO- stop be evil'

6

Ou divida o caminho e use-o no localizador - a primeira correspondência deve ser a solução

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

type é claro que é mais fácil.


2
Isso é bastante útil. Eu não sabia que eu poderia dividir $ PATH em suas sub componentes e procurar cada um comfind
Ehtesh Choudhury

1
Não tentei, mas acho que isso pode romper com espaços nos componentes do PATH
encerrado em 15/07/16

4

Você pode estar usando o bash, mas a sintaxe da whichsaída mostra que você usa o antigo whichescrito em csh. O PATH aparece entre parênteses, e os diretórios no PATH têm entradas como /opt/SUNWspro/bine /usr/ccs/binque só fazem sentido no Solaris. Isso é consistente: o Solaris usou o csh which.

Aqui está o meu palpite: você tem um PATH para o bash e outro para o csh. Isso pode ser um problema do sistema. Pelo que me lembro, o Solaris mantém os arquivos / etc / profile e / etc / cshrc para a configuração de PATH em todo o sistema. Esses dois arquivos de inicialização podem definir variáveis ​​PATH diferentes para diferentes shells. Faça "echo $ PATH" em bash e verifique se ele concorda com o que o whichcomando imprime como uma sequência PATH.


4
command -v assemble.sh

Info

-v imprime uma descrição do COMMAND similar ao `type 'embutido

Também seria útil se você quiser encontrar em uma versão modificada do PATHASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
encerrada 15/07/16

0

Você pode usar locate assemble.shpara encontrar o local do arquivo.


Não, isso mostra a localização de todos os arquivos legíveis (mundiais) cujo nome contém assemble.sh, o que é irrelevante aqui.
Gilles 'SO- stop be evil'

Não é irrelevante. Mesmo se ele tivesse vários arquivos chamados assim locate, também lhe daria a localização do que ele deseja. assemble.shnão é um nome de arquivo tão comum, então ele provavelmente encontrará o arquivo facilmente (que é o que o OP solicita).
Nico

1
Você não precisa updatedbantes de locatemostrar resultados?
Glenn Jackman

1
Geralmente updatedbé executado diariamente como um trabalho cron, mas sim, talvez seja necessário forçá-lo se o arquivo for muito recente.
Nico
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.