Perché devo sorgente .bashrc ogni volta che apro il terminale affinché gli alias funzionino? [duplicare]


25

Ho aggiunto questa riga nel mio ~/.bashrcfile.

alias myserver='ssh davidfaux@davidfaux.com'

Tuttavia, quando apro il terminale e corro myserver, il terminale si lamenta

-bash: myserver: command not found

Quando provo il mio file .bashrc, tuttavia, ( . .bashrc), l'alias funziona.

Tuttavia, non desidero eseguire il sorgente del file ogni volta che apro il terminale affinché l'alias funzioni. Come posso farlo accadere?


3
Questo commento spiega il motivo di ciò. Questa domanda ti dice come risolverlo.
ughoavgfhw,

Molte grazie! Non sapevo che l'avvio della shell eseguisse quei file in ordine. Anzi, si aggiunge . .bashrcalle .bash_profileopere.
David Faux,

@ughoavgfhw puoi / dovresti cambiare il tuo commento in una risposta? In questo modo può essere contrassegnato come una risposta.
soxman,

Risposte:


25

In breve, stai inserendo i tuoi alias nel file sbagliato .bashrc, ecco perché devi continuare a far funzionare source per far funzionare gli alias in qualsiasi nuova istanza del terminale di accesso.

Dal commento di Chris Johnsen su Perché .bashrc non viene eseguito automaticamente?

Per impostazione predefinita, Terminal avvia la shell tramite / usr / bin / login, il che rende la shell una shell di accesso. Su ogni piattaforma (non solo su Mac OS X) bash non usa .bashrc per le shell di login (solo / etc / profile e il primo file .bash_profile, .bash_login, .profile che esiste ed è leggibile). Questo è il motivo per cui "inserisci source ~ / .bashrc nel tuo .bash_profile" è un consiglio standard.

Per ulteriori informazioni, consultare la pagina del manuale per bash:

man bash

Quindi cerca nella sezione INVOCATION.


Devo riavviare per far funzionare le cose? Perché ho aggiunto source ~/.bashrcal mio .bash_profile, ma sto ancora affrontando lo stesso problema ...
Michiel

1
No, nella maggior parte dei casi è sufficiente aprire una nuova finestra del terminale affinché le modifiche abbiano effetto, le modifiche avranno effetto solo nella finestra appena aperta.
MrDaniel,

11

Puoi sempre mettere

if [ -n "$BASH_VERSION" ] && [ -f $HOME/.bashrc ];then
    source $HOME/.bashrc
fi

nel file ~/.profileo ~/.bash_profilesu Mac penso.

Oooor, potresti semplicemente mettere le tue cose dentro .profileo .bash_profile.


Questo è notato nell'altra risposta: perché non sei sicuro di queste cose?
user151019,

Si prega di leggere questa domanda molto simile: apple.stackexchange.com/q/12993/22003 e aggiungere lì eventuali miglioramenti.
dan

@danielAzuelos Wait; vuoi che commenti sull'altra pagina o aggiorni la mia risposta in base all'altra domanda?
Dylan,

@Mark Stavo solo pensando in un senso molto ipotetico - come se il processo terminale di qualcuno non fosse in grado di reperire .profile? Il loro terminale probabilmente non sarebbe iniziato in primo luogo, ma è ancora possibile .... come se qualcuno stesse hackerando il proprio / usr / bin / login o qualcosa del genere.
Dylan,

→ Dylan: leggi questa domanda molto simile: apple.stackexchange.com/q/12993/22003 e troverai una risposta al tuo "forse?".
dan,
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.