Come risolvere il Terminale che non carica ~ / .bashrc su OS X Lion [chiuso]


176

Ogni volta che apro una nuova scheda in Terminale usando Cmd+ T, si apre bash nella stessa directory, come la scheda precedente. Funziona bene quando sono nella ~directory, ma se sono altrove, viene visualizzato un errore durante il caricamento.bashrc

Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

Sembra che .bashrcsia caricato tramite percorso relativo e non assoluto, perché se lo faccio source ~/.bashrc, tutto funziona senza intoppi.

bashrc caricato

Penso che questo sia un problema relativo a OS X Lion, perché prima dell'aggiornamento da Snow Leopard non avevo lo stesso problema. Ma ciò potrebbe essere causato dal fatto che Terminal si apre sempre su ~, non ricordo se ha provato ad aprire la stessa directory.

Tuttavia, la domanda rimane la stessa, come posso caricare il terminale ~/.bashrctramite un percorso assoluto e non relativo?


1
questa domanda dovrebbe essere spostata su apple.SE (se possibile?), non chiusa.
— Sparr,

@Sparr Sono totalmente d'accordo con te, ma i moderatori stanno spostando solo domande più recenti, non più vecchie. Vedi la discussione qui
— рüффп,

Risposte:


357

Il terminale apre una shell di login. Questo significa che ~/.bash_profileverrà eseguito, ~/.bashrcno.

La soluzione sulla maggior parte dei sistemi è "richiedere" ~/.bashrcil ~/.bash_profile: basta inserire questo frammento nel tuo ~/.bash_profile:

[[ -s ~/.bashrc ]] && source ~/.bashrc

8
Qualcuno potrebbe spiegare cosa [[ -s /file/path ]]sta facendo? Cercare una spiegazione su Google non è troppo facile.
— Shane,

18
Da man bash: -s file Vero se il file esiste e ha una dimensione maggiore di zero.
— ckruse

1
"Il terminale apre una shell di login" - quali sono gli altri tipi di shell os? Dove posso trovare più documentazione a riguardo?
— dknight

4
Esistono le cosiddette "shell interattive" e "shell di login". Il tuo manuale di Bash ( man bash) ne parla e lo spiega, capitolo INVOCAZIONE (basta cercare INVOCATIONdopo aver chiamato man bashdigitando /INVOCATION)
— ckruse

3
Non riesco a vedere come una domanda relativa a una situazione di esecuzione del codice, risolta da una riga di codice, sia "off topic" in un sito di domande di programmazione.
— Kheldar,

26

Anche la ridenominazione .bashrcin .profile(o il collegamento soft del secondo al primo) dovrebbe fare il trucco. Vedi qui .


Oppure potresti simbolizzarli: cd && ln -s ./.bashrc ./.profileNota che i collegamenti simbolici sono sensibili riguardo al percorso del file, credo che l'uso della sintassi sopra funzioni, ma per essere sicuro di poter usare percorsi assoluti in ogni caso.
— Steve Benner,

1
No? Questi file hanno scopi diversi. Se hai la sintassi di Bash .profile, verrai interrotto regolarmente sh.
— Tripleee

14

Ho il seguente nel mio ~/.bash_profile:

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

Se avessi .bashrcinvece ~/.bashrc, vedrei lo stesso sintomo che stai vedendo.

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.