Risposte:
.bashrc
è uno script di shell che Bash esegue ogni volta che viene avviato in modo interattivo. Inizializza una sessione di shell interattiva. È possibile inserire qualsiasi comando in quel file che è possibile digitare al prompt dei comandi.
Metti qui i comandi per impostare la shell per l'uso nel tuo ambiente particolare o per personalizzare le cose in base alle tue preferenze. Una cosa comune da inserire .bashrc
sono gli alias che vuoi essere sempre disponibili.
.bashrc
funziona ad ogni lancio interattivo della shell. Se dici:
$ bash ; bash ; bash
e quindi premere Ctrl-Dtre volte, .bashrc
verrà eseguito tre volte. Ma se dici questo invece:
$ bash -c exit ; bash -c exit ; bash -c exit
quindi .bashrc
non funzionerà affatto, poiché -c
rende la chiamata Bash non interattiva. Lo stesso vale quando si esegue uno script di shell da un file.
Contrasto .bash_profile
e .profile
che vengono eseguiti solo all'inizio di una nuova shell di accesso. ( bash -l
) Sei tu a scegliere se un comando va .bashrc
contro vs a .bash_profile
seconda che tu voglia eseguirlo una volta o per ogni avvio interattivo della shell.
Come un controesempio per pseudonimi, che preferisco a mettere in .bashrc
, si vuole fare PATH
aggiustamenti .bash_profile
, invece, dal momento che questi cambiamenti sono in genere non idempotente :
export PATH="$PATH:/some/addition"
Se lo metti .bashrc
invece, ogni volta che avvii una sotto-shell interattiva, verrai :/some/addition
bloccato alla fine del PATH
nuovo, creando ulteriore lavoro per la shell quando digiti male un comando.
È possibile ottenere una nuova shell Bash interattivo ogni volta che sborsare divi
con :sh
, per esempio.
.bashrc
quando è iniziato come una shell di login. Questo a volte può portare a comportamenti imprevisti . La soluzione più comune è quella fonte .bashrc
da .profile
o .bash_profile
invece.
.bashrc
non è destinato all'uso da parte di altre shell, è meglio non utilizzarlo .profile
(che potrebbe essere utilizzato da altre non bash
shell).
source ~/.bashrc
o . ~/.bashrc
o [[ -f ~/.bashrc ]] && source. ~/.bashrc
o [ -f ~/.bashrc ] && source ~/.bashrc
non funziona?
.bashrc
è effettivamente di provenienza (utilizzando il comando consigliato da superuser.com/a/183980/128768 ). Il problema mi trovo di fronte è in realtà il non approvvigionamento di https://github.com/junegunn/fzf
tramite questo comando all'interno .bashrc
: source ~/.fzf.bash
. Lancio un nuovo terminale, quindi Ctrl
+ R
e ottengo `__fzf_history__`bash: fzf: command not found
. .bashrc
Sorgo manualmente e lo stesso tasto di scelta rapida avvia fzf come previsto. Ci scusiamo per il rumore qui.
Lo scopo di un .bashrc
file è fornire un luogo in cui è possibile impostare variabili, funzioni e alias, definire il prompt (PS1) e definire altre impostazioni che si desidera utilizzare ogni volta che si apre una nuova finestra del terminale.
Funziona eseguendo ogni volta che si apre un nuovo terminale, finestra o riquadro.
Puoi vedere il mio qui (immagine con evidenziazione della sintassi) :
HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"
Spiegazione:
-1. Imposta il mio file di cronologia per ignorare i duplicati ed essere molto più grande di quello predefinito.
-2. Opzione a colori per ls
dipendere da se stai usando Linux o OSX
-3. Funzione " md
" per creare e cd in una directory con un comando
-4. Trova il ramo git corrente se in un repository git e ...
-5. -9. Definisci un fantastico prompt per PS1, come in
-10. Miglioramento del prompt di PS2
-11. Impostare vi come editor dalla riga di comando
-12. Impostare vi come editor predefinito
-13. esegui il mio .bash_aliases
file se esiste
-14. Esegui lo script di completamento della mia scheda git (per telecomandi e rami) se esiste.
-15. Eseguire autojump se esiste
-16. Consenti il cd senza digitare la parte cd se la versione bash> = 4
-17. Eseguire uno script di completamento bash se esiste
-18. Utilizzare TMUX se è presente
-19. Aggiungi rvm al mio PERCORSO
-20. Usa rvm se esiste.
Ho realizzato questo portatile in modo che funzioni su qualsiasi delle mie macchine linux o OSX senza personalizzazione, quindi un certo numero di test per la presenza vengono eseguiti prima di utilizzare determinate funzioni e altri script.
Ciò semplifica inoltre l'utilizzo immediato dell'intero file su una nuova macchina senza problemi che incidono sull'apertura di una nuova finestra del terminale.
È un bash
file di configurazione.
Shell interattive (non di accesso), quindi la configurazione viene letta da questi file:
$HOME/.bashrc
Per le shell di accesso, la configurazione viene letta da questi file:
/etc/profile
(Sempre di provenienza)$HOME/.bash_profile
(il resto di questi file viene controllato in ordine fino a quando non ne viene trovato uno, quindi non ne vengono letti altri)$HOME/.bash_login
$HOME/.profile
La semplice illustrazione di come / quando vengono caricati è nell'immagine qui sotto.
Ho aggiunto un echo
al mio .bashrc
e.bash_profile
vedi man bash
per maggiori informazioni
.bashrc
e distingue la differenza tra .bashrc
e .bash_profile
che copre il contenuto della risposta. Non scoraggiarti, fai uno sforzo onesto, ma cerca di concentrarti sulla risposta alle domande con alcuni contenuti non coperti da altre risposte.