Encontre a localização da função shell/bash no disco

Encontre a localização da função shell/bash no disco

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, não me dará a localização deste comando no shell script.

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

Responder1

Essa pergunta já foi respondidaaqui. Portanto, há duas coisas que podem ser derivadas desse fato:

  1. Você deveria 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 grepfazer o que você quer

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

# 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

Responder2

whichapenas pesquisa o caminho. Para ver o que o bash realmente executa, use o comando integrado type:

type foo

informação relacionada