Dove trovare il file .bashrc su Mac OS X Snow Leopard e Lion?


89

Voglio installare rvm sulla mia macchina Snow Leopard.

Dice che devo aggiungere una riga al mio .bashrcfile (sto usando bash) ma dov'è il mio .bashrcfile?


1
Dovresti inserire la soluzione in una risposta e accettarla (dovrai aspettare un giorno o due prima che SU ti consenta di farlo). In questo modo le persone con lo stesso problema possono vedere la domanda e vedere che ha una risposta.
Nifle,

1
La sua soluzione non è diversa dalla risposta più votata ..
David Cowden,

Solo per essere sicuri, questo non è un problema di "Linux = .bashrc vs. Mac OS =. (Bash_) profilo" i file di avvio della shell funzionano allo stesso modo su Linux e Mac e il file .bashrc è il posto più appropriato per Session impostazioni specifiche. usi ad esempio tmux o screen potresti non avere sessioni di accesso ma desideri comunque i tuoi alias. Il motivo per cui Mac si sente diverso è che la maggior parte delle distribuzioni Linux fornisce script di profili di sistema o profili scheletro che delegano già (sorgente) bashrc.
Controlla il

Risposte:


78

Per quanto riguarda il problema con .bashrcsopra:

Sulla maggior parte dei sistemi, ~/.bashrcviene utilizzato solo quando si avvia una shell interattiva non di accesso . Tuttavia, quando si avvia una nuova shell è spesso una shell di accesso interattiva . Poiché si tratta di una shell di accesso , .bashrcviene ignorata. Per mantenere l'ambiente coerente tra shell non di accesso e shell di accesso, è necessario procurarsi il .bashrcproprio .profileo il proprio .bash_profile.

Vedere il Manuale di riferimento di Bash, sezione 6.2 File di avvio di Bash

Richiamato come shell di login interattiva o con --login

Quando Bash viene invocato come shell di login interattiva o come shell non interattiva con l'opzione --login, legge ed esegue prima i comandi dal file / etc / profile, se quel file esiste. Dopo aver letto quel file, cerca ~ / .bash_profile, ~ / .bash_login e ~ / .profile, in quell'ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile.

Richiamato come shell interattiva non di accesso

Quando viene avviata una shell interattiva che non è una shell di accesso, Bash legge ed esegue i comandi da ~ / .bashrc, se quel file esiste.

Quindi, in genere, il tuo ~ / .bash_profile contiene la linea

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

dopo (o prima) qualsiasi inizializzazione specifica per il login.

Sul mio Mac (Running Leopard), non c'erano linee per la fonte ~/.bashrc. Ho dovuto aggiungere questa funzionalità da solo.

Su alcuni sistemi e altri sistemi operativi, .bashrcproviene dal globale /etc/profileo /etc/bash_profileoppure viene eseguito utilizzando i file modello da /etc/skel.

Ad essere onesti, la distinzione tra .bashrce .bash_profilenon è ben compresa dalla comunità. Quando molti sviluppatori dicono "Aggiungi questo al tuo .bashrc", ciò che realmente significano è "Aggiungi questo al tuo .bash_profile". Vogliono che la funzionalità venga aggiunta alla shell di accesso (che è .bash_profile), non alla shell non di accesso . In realtà, di solito non importa e inserire la configurazione .bashrcè accettabile.


Questo link offre una buona panoramica dei tipi di shell e del caricamento dei file di avvio - hacktux.com/bash/bashrc/bash_profile
studgeek

Cosa si intende per "provenienza" qui?
elgrego,

@elgrego, ecco una buona descrizione: quando un file proviene (digitando il nome del file sorgente o .nomefile nella riga di comando), le righe di codice nel file vengono eseguite come se fossero stampate nella riga di comando. Vedi tldp.org/HOWTO/Bash-Prompt-HOWTO/x237.html
Stefan Lasiewski

60

Così scopre che su Mac OS X Snow Leopard e Mac OS X Lion, il file che è caricato viene chiamato .profile, non è .bashrc.

Quello che vuoi fare è creare un file ~/.profilee chiamarlo .profile (se non esiste già).

Inserisci tutte le informazioni necessarie per caricare lì ogni istanza di bash (Grazie, thepurplepixel).

Un paio di note collaterali:

  1. Il punto davanti al file lo contrassegna come invisibile a Finder e il comando ls per impostazione predefinita. Per elencare i file invisibili usando il comando ls dal Terminale, usa il -aparametro as in quanto tale:ls -a
  2. Il ~simbolo indica /Users/YourUserNamedove YourUserName è il nome breve del tuo nome utente.

Modifica: Chris Page nota (correttamente) che qualunque cosa tu inserisca in un file .profile si applicherà a qualunque shell tu stia usando (es. Zhs, bash, eccetera). Se si desidera che il contenuto influisca solo sulla shell bash, posizionare il contenuto in un .bash_profilefile anziché in un .profilefile.


5
Alla tua domanda è stata data una risposta [corretta] il 1 ° giugno 2010, un giorno dopo la tua richiesta. Più di un anno dopo, torni e fornisci la stessa identica risposta e accetti la tua stessa risposta ...
David Cowden,

3
In realtà la sua risposta aggiunge ulteriori dettagli rispetto alla risposta fornita il 1 giugno 2010. Risolve in modo specifico il problema su Mac OS X che ho trovato utile.
webworm,

3
Nota che se .bash_profileesiste già un nella tua home directory, il .profilefile non verrà letto!
Phani,

Ho una nuova installazione di Mac Os El capitan. Non esiste un file di profilo . Basta creare un file .profile e funziona. Ho rinominato personalmente il mio .bashrc in .profile.
Nicolas Thery,

4

Devi crearne uno tuo .bashrc. Puoi semplicemente usare un editor di testo per creare un file chiamato .bashrc(senza estensione) con i contenuti che desideri e salvarlo nella tua home directory ( /Users/YourUserName/).


1
in realtà, non ha funzionato, ma mi hai inviato nella giusta direzione dicendomi di creare il mio file. Il file che funzionava su una configurazione di Snow Leopard era .profile, non .bashrc (che per qualche motivo non è stato caricato in questo sistema operativo). Pubblicherò istruzioni dettagliate nella domanda. Grazie!
Yuval,

@Yuval: per impostazione predefinita, .bashrcfunzionerà, ma solo se non c'è .profile. Immagino che ~/.profileesista di default, però. Sono contento di poterti aiutare! (E dovresti mettere la tua soluzione in una risposta e accettarla per i futuri lettori di questa domanda).
squircle

Penso che il tuo commento solo se non esiste un profilo. Non è corretto. .bashrc funzionerà all'interno di una shell interattiva non di accesso, o se proviene da .profile (.bash_profile è probabilmente un posto migliore, poiché .profile è per la shell Bourne). .profile viene utilizzato durante una shell interattiva non di accesso.
Stefan Lasiewski,

@Stefan Sembra corretto, quindi. Non sono un esperto :)
squircle

2
Nessuno è ;). Questa roba (.bashrc vs .profile vs. .bash_profile vs. .bash_login vs shell di login interattiva vs shell non di accesso interattiva vs shell non interattiva) è confusa, ed è interrotta e sovrascritta da molti Unix e script di shell.
Stefan Lasiewski,

3

Trovo che nel mio OS 10.6.5 le impostazioni di bash siano in "/ etc / bashrc". Penso che queste siano le specifiche di livello superiore per la shell.

Tuttavia, è necessario un account di root per modificarlo. Le specifiche locali per utente "~ / .bashrc" dovrebbero iniziare con il frammento seguente, per leggere e caricare le impostazioni bash a livello di sistema:

if [ -r /etc/bashrc ]; then
    . /etc/bashrc 
fi

Di solito aggiungo alias nel bashrc a livello di sistema in modo che anche tutti gli utenti possano accedervi. A meno che non vogliano usare scorciatoie e alias.

In bocca al lupo!


2
/ etc / profile (gestito da shell di accesso) è uno script di avvio bash globale che si applica a tutti gli utenti e fornisce comportamenti predefiniti per le shell di accesso. A sua volta esegue / etc / bashrc, che contiene personalizzazioni che si applicano sia alle shell di accesso che a quelle non di accesso. Allo stesso modo, i singoli utenti dovrebbero creare un file ~ / .bash_profile che esegue ~ / .bashrc, che è dove dovrebbe essere la maggior parte delle personalizzazioni, e ~ / .bashrc dovrebbe eseguire / etc / bashrc per ereditare comportamenti predefiniti per shell non di accesso.
Chris Page

1
Per i singoli utenti, è meglio aggiungere queste personalizzazioni alla vostra directory home in ~/.bashrc, non è /etc/bashrc. /etc/bashrcsono le impostazioni globali per tutti gli utenti del tuo sistema, che probabilmente non è quello che desideri. Inoltre, Apple potrebbe presentarsi e cambiare /etc/bashrcperiodicamente, il che potrebbe spazzare via le tue personalizzazioni.
Stefan Lasiewski,

1

Utilizzare il file .profile per aggiungere tutto ciò che si desidera aggiungere a un file .bashrc di Linux.

Per esempio

PATH=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/:/opt/local/bin:/opt/depot_tools/:~/bin:$PATH
alias t='/Users/<username>/.todo/todo.sh'
alias punch='python /Users/<username>/.todo/Punch.py'
alias clock='cat </dev/tcp/time.nist.gov/13'
alias sudotext="sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit" 

2
Ti consiglio di usare ~ / .bash_profile (invece di ~ / .profile) a meno che tu non sia sicuro di volere che le tue personalizzazioni abbiano effetto su altre shell e che siano compatibili.
Chris Page

Solo per essere sicuri, questo non è un problema di "Linux = .bashrc vs. Mac OS =. (Bash_) profilo" i file di avvio della shell funzionano allo stesso modo su Linux e Mac e il file .bashrc è il posto più appropriato per Session impostazioni specifiche. usi ad esempio tmux o screen potresti non avere sessioni di accesso ma desideri comunque i tuoi alias. Il motivo per cui Mac si sente diverso è che la maggior parte delle distribuzioni Linux fornisce script di profili di sistema o profili scheletro che delegano già (sorgente) bashrc.
Il
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.