2013-02-15 17 views
6

Come trovare l'origine di una funzione bash incorporata?bash built in function bash codice sorgente

So che si tratta di una funzione:

$type -t MY_APP 
function 

vedo che è il codice:

type MY_APP 
code 

Le domande sono:

  1. Dove è conservato?
  2. Come posso modificarlo?

risposta

7

Si può fare in questo modo:

# Turn on debug 
$ shopt -s extdebug 

# Print out the function's name, line number and file where it was sourced from 
$ declare -F my_function 
my_function 46 /home/dogbane/.bash/.bash_functions 

# Turn off debug 
shopt -u extdebug 

Per modificare la funzione, aprire il file che contiene la definizione della funzione (che avete trovato dall'alto). Modifica la funzione e salva il file. Poi fonte nella tua shell, in questo modo:

$ . /path/to/function_file 
+0

funziona! Ho provato a dichiarare -F my_function, ma stampa solo il nome della funzione senza la funzione di debug. Grazie per un buon consiglio. – idobr

+0

+1 Non ho mai usato 'extdebug', quindi non sapevo che esistesse un modo per vedere il file da cui proveniva una funzione. Molto bella. – chepner

+0

Questo è geniale! –

0

funzioni sono in genere memorizzati nel file .bashrc (o in /etc/bash.bashrc, che esiste anche come appena /etc/bashrc su alcuni sistemi). This answer di SuperUser ha alcuni buoni dettagli su ciò che è un file .bashrc. Allo stesso modo, this question sui dettagli del sito Linux di Unix & quando è meglio fare l'alias, quando eseguire lo script e quando scrivere una funzione.

+0

L'argomento collegato è interessante. Ho cercato in .bashrc e .bashprofile, la funzione definita era in altro posto. La risposta di @dogbane mi ha aiutato. – idobr