2013-02-12 18 views
6

Quindi sto cercando di creare un file bashrc/bash_profile portatile. Ho un singolo script che sto collegando simbolicamente a .bashrc, .bash_profile, ecc. Quindi guardo allo $0 e cambio quello che faccio in base a quale script è stato chiamato. Il problema è quello che la shell chiama lo script di bashrc, ovviamente esegue bash veramente il che significa che $0 per me è -bash. $1 altro non è impostato sul nome dello script.Come posso ottenere il nome dello script che viene eseguito in bash?

Quindi la mia domanda è, in bash come posso ottenere il nome dello script in esecuzione. Non il binario che lo esegue, ad es. bash?

Presumo che mi stia dando -bash con $1 non impostato perché in realtà non è un nuovo processo. Qualche idea?

risposta

2

La variabile BASH_ARGV dovrebbe funzionare, sembra la sceneggiatura è being sourced

$BASH_ARGV 
+0

Significa che questo non è generico. Quando analizzi $ ARGV devi sapere che sei stato chiamato da un altro script. Forse sto sbagliando. Se sbaglio, dovresti migliorare la spiegazione della tua risposta, ad es. aggiungi un esempio – hek2mgl

24

Prova:

readlink -f ${BASH_SOURCE[0]}

o semplicemente:

${BASH_SOURCE[0]}.

Osservazioni:

$0 funziona solo quando l'utente esegue "./script.sh"

$BASH_ARGV funziona solo quando l'utente esegue o "fonte script.sh"

"script.sh."

${BASH_SOURCE[0]} funziona in entrambi i casi.

readlink -f è utile quando si utilizza il collegamento simbolico.

+0

Questa dovrebbe essere la risposta accettata in quanto dà maggiori dettagli e spiega i diversi scenari più chiara. – piratemurray

Problemi correlati