Bash non legge .bashrc se non avviato manualmente


22

bashnon verrà generato .bashrcda un terminale interattivo a meno che non esegua manualmente bashda un terminale:

$ bash

o fonte manualmente:

$ source ./.bashrc

o in esecuzione:

$ st -e bash

Ecco alcuni utili risultati che spero:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Sono su CRUX Linux 3.0 e utilizzo dwme st. Ho provato a usare .bash_profilee .profilesenza successo.

Qualche idea?

Risposte:


19

Perché dovrebbe procurarselo? Non stai eseguendo true bash:

$ echo $SHELL
/bin/sh

Nella maggior parte dei sistemi moderni shè un collegamento simbolico a una shell di base. Sul mio Debian per esempio:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

Nel tuo caso, shè un collegamento a bashma, come spiegato in man bash:

Se bash viene invocato con il nome sh, cerca di imitare il comportamento di avvio delle versioni storiche di sh il più vicino possibile, pur essendo conforme allo standard POSIX. [...] Quando viene invocato come shell interattiva con il nome sh, bash cerca la variabile ENV, espande il suo valore se è definito e usa il valore espanso come nome di un file per leggere ed eseguire. Poiché una shell invocata come sh non tenta di leggere ed eseguire comandi da altri file di avvio , l'opzione --rcfile non ha alcun effetto.

e

--norc
Non legge ed esegue il file di inizializzazione a livello di sistema /etc/bash.bashrc e il file di inizializzazione personale ~ / .bashrc se la shell è interattiva. Questa opzione è attiva di default se la shell è invocata come sh.

Quindi, poiché la shell predefinita è sh, .bashrcnon viene letta. Basta impostare la shell predefinita su bash usando chsh -s /bin/bash.


Grazie. Ho pensato che non importava dal /bin/shappuntito /bin/bash. Suppongo che questo problema derivasse dal non assegnare esplicitamente la shell a /bin/bashquando ho originariamente creato l'account utente.
fretta,

Inoltre, Debian / Ubuntu commutata dashper /bin/shcome parte dello sforzo per ridurre il tempo di avvio. Questo è stato esilarante quando i miei utenti hanno iniziato a chiedersi perché la loro shell si comportava diversamente.
Kurtm,

18

In .bash_profile assicurati di disporre di quanto segue:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi

1
@terdon La tua risposta è quella corretta. La mia risposta sarebbe valida solo se stava correndo bash. Bella cattura, mi è mancato.
Jeight,

Questo potrebbe darti qualche mal di testa se corri bashaccanto a un'altra shell, come quella ksh93che usa .profiledi default.
Kusalananda

Se ~ / .bash_profile non esiste, puoi crearlo.
Pratik Singhal,

.bashrc nel sistema operativo basato su Debain, .bash_profile in CentOS / Fedora / Mac OS
Mitoxys,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.