2011-02-10 15 views

risposta

79

Aggiungi source /whatever/file (o . /whatever/file) in .bashrc dove si desidera includere l'altro file.

+16

Si dovrebbe gestire non-esistenza con grazia. Ad esempio, verifica l'esistenza (test -r percorso &&. percorso) o ignora errori (. percorso 2>/dev/null) –

+1

@William Pursell IMO è più facile testare una volta, quindi scrivere il codice per i casi, che il 99,99% non accadrà mai . – Daniel

+3

@Daniel Non sono d'accordo. Le cose che accadono lo 0,01% delle volte possono verificarsi migliaia di volte al secondo. E avendo un .bashrc su un $ NFS montato su NFS potrebbe significare che il tasso di errore nell'acquisizione di un file è molto più elevato dello 0,01% –

28

Per evitare errori, è necessario innanzitutto verificare che il file esista. Quindi fonte il file. Fai qualcosa del genere.

# include .bashrc if it exists 
if [ -f $HOME/.bashrc_aliases ]; then 
    . $HOME/.bashrc_aliases 
fi 
+3

anche alla fine del file .bashrc_aliases o qualunque file sto recuperando echo un'istruzione come echo "Alias ​​caricati" – Nick

+1

Mi sono detto: "~ $ HOME, giusto?" Ahimè, 'if [-f ~/.bashrc_aliases];' non funziona. – modle13

2

Se si dispone di più file da caricare, che può o non può esistere, è possibile mantenere in qualche modo elegante utilizzando un ciclo for.

files=(somefile1 somefile2) 
path="$HOME/path/to/dir/containing/files/" 
for file in ${files[@]} 
do 
    file_to_load=$path$file 
    if [ -f "$file_to_load" ]; 
    then 
     . $file_to_load 
     echo "loaded $file_to_load" 
    fi 
done 

L'output sarà simile:

$ . ~/.bashrc 
loaded $HOME/path/to/dir/containing/files/somefile1 
loaded $HOME/path/to/dir/containing/files/somefile2 
+0

Sicuramente non è necessario verificare la presenza di file all'interno del ciclo? (A meno che non si disponga di un elenco molto dinamico di file sul disco) –

+0

Esiste un solo controllo per la presenza di file. Se il tuo attuale ambiente di lavoro non ha il file descritto nella lista, sarà semplicemente un errore sul carico di quel file e creerà rumore visivo. Un approccio più ideale sarebbe quello di ottenere un elenco di file, quindi di eseguire il looping di questo, piuttosto che definire un elenco statico. – modle13

0

preferisco verificare la versione prima e assegnare variabili per il percorso di configurazione:

if [ -n "${BASH_VERSION}" ]; then 
    filepath="${HOME}/ls_colors/monokai.sh" 
    if [ -f "$filepath" ]; then 
    source "$filepath" 
    fi 
fi 
Problemi correlati