Perché gli alias in una shell Bash non intertriggers non funzionano

Sto cercando di usare alias in una shell bash non intertriggers. Ho definito i miei alias in ~/.bashrc e ho impostato la variabile BASH_ENV=~/startUpFile . I contenuti di startUpFile sono source ~/.bashrc .

Posso vedere che i miei alias sono riconosciuti, quando eseguo il comando alias . Tuttavia, se provo a usare un alias definito in ~/.bashrc , Bash non può riconoscerlo. Mi dà l’errore di comando sconosciuto.

Con la shell TCSH è abbastanza facile farlo perché il file ~/.cshrc viene sempre letto.

Qualche idea su come posso farlo con una shell Bash?

    Il comando shopt -s expand_aliases consentirà l’espansione shopt -s expand_aliases in shell non interattive.

    .bashrc viene elaborato solo da shell interattive.

    Inoltre, gli alias non vengono espansi quando la shell non è intertriggers, a meno che l’opzione della shell expand_aliases sia impostata utilizzando shopt . A meno che, naturalmente, la modalità POSIX sia invocata chiamando la shell con il nome sh invece di bash .

    Le persone che usano alias molto spesso .bashrc origine al loro .bashrc alla fine del loro profilo in modo che gli alias esistano anche per le shell non interattive. Questo potrebbe non essere il modo migliore, ma è abbastanza comune.

    Sono cose come questa che mi portano a credere che nel 21 ° secolo dovremmo abbandonare gli script di shell in favore di un linguaggio completo come Python. È molto più prevedibile.

    Devi

     shopt -s expand_aliases 

    nel file puntato nel tuo BASH_ENV

    Ho avuto un problema simile, alla fine, ho scoperto che ~ / .bashrc era tutto ciò di cui avevo bisogno.

    Tuttavia, in Ubuntu, ho dovuto commentare la riga che interrompe l’elaborazione di ~ / .bashrc:

     If not running interactively, don't do anything [ -z "$PS1" ] && return