Localiza localização da função shell / bash no disco [duplicado]

0

Se eu tiver uma função assim:

    #!/usr/bin/env bash

    function foo {

    }

e a função acima está em .bash_profile ou em algum lugar.

Se eu usar which foo , ele não me fornecerá a localização desse comando no shell script.

Existe alguma maneira de descobrir onde ele está localizado ou é grep minha melhor aposta?

    
por Alexander Mills 27.11.2017 / 08:29

2 respostas

2

Esta questão já foi respondida aqui . Então, há duas coisas que podem ser derivadas desse fato:

  1. Você deve fazer uma pesquisa melhor antes de postar sua pergunta aqui (mas, bem, todos nós somos preguiçosos de vez em quando)
  2. Existe um truque muito melhor do que grep para fazer o que você quer

Assim, você pode obter um arquivo de origem e um número de linha de uma função de shell em seu PATH assim: (crédito: responder )

# Turn on extended shell debugging
shopt -s extdebug

# Dump the function's name, line number and fully qualified source file  
declare -F foo

# Turn off extended shell debugging
shopt -u extdebug
    
por 27.11.2017 / 10:58
1

which só pesquisa o caminho. Para ver o que o bash realmente executa, use o comando interno type :

type foo
    
por 27.11.2017 / 10:55