Speicherort der Shell-/Bash-Funktion auf der Festplatte suchen

Speicherort der Shell-/Bash-Funktion auf der Festplatte suchen

Wenn ich eine Funktion wie diese habe:

    #!/usr/bin/env bash

    function foo {

    }

und die obige Funktion befindet sich in .bash_profile oder irgendwo.

Wenn ich which fooes verwende, wird mir der Speicherort dieses Befehls im Shell-Skript nicht angezeigt.

Gibt es für mich eine Möglichkeit herauszufinden, wo es sich befindet, oder ist das grepmeine beste Wette?

Antwort1

Diese Frage wurde bereits beantwortetHierAus dieser Tatsache lassen sich zwei Dinge ableiten:

  1. Sie sollten besser recherchieren, bevor Sie Ihre Frage hier posten (aber na ja, wir sind alle von Zeit zu Zeit faul).
  2. Es gibt einen viel besseren Trick, als grepzu tun, was Sie wollen

So können Sie eine Quelldatei und eine Zeilennummer einer Shell-Funktion in Ihrem PATH wie folgt erhalten: (Quelle:diese Antwort)

# 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

Antwort2

whichdurchsucht nur den Pfad. Um zu sehen, was Bash wirklich ausführt, verwenden Sie den integrierten Befehl type:

type foo

verwandte Informationen