bash
agisce diversamente se si tratta di una shell o di un normale linguaggio di programmazione (come perl
o python
).
In base alla progettazione, le impostazioni in ~/.bash_profile
, ~/.bashrc
ecc. Consentono agli utenti di impostare le cose quando bash
svolge il ruolo di shell (shell di login, shell interrattiva). Pensa all'ambiente che hai in una xterm
(shell interattiva) o nelle ssh
sessioni (shell di accesso) o nelle console (shell di accesso).
D'altra parte, bash
c'è anche un potente linguaggio di programmazione, che pensa a molti script per la gestione dei servizi systemd
, che richiede un diverso stile di lavoro. Ad esempio, quando uno sviluppatore sta scrivendo uno script di sistema o un bash
programma, non gli piace procurarsi ~/.bash_profile
automaticamente l'utente . È un programma normale, non una shell. Un normale programma (compresi i bash
programmi) erediterebbe naturalmente le impostazioni dall'attuale funzionamento (shell), ma non le imposta .
Se scriviamo un programma per cron
in bash
- sembra essere scritto bash
; infatti, siamo in grado di scrivere in python
o di perl
o di qualsiasi altra programmazione Lingua- allora possiamo avere la possibilità di fonti bash
s' ~/.bash_profile
(leggi: l'impostazione della shell dell'utente, che sembra appena essere la stessa lingua del linguaggio di programmazione):
[ -f /home/user/.bash_profile ] && . /home/user/.bash_profile
Tuttavia, cosa succede se quel particolare utente non usa bash
come shell? Lui / lei può utilizzare zsh
, ksh
, fish
, ecc Quindi, che la pratica avrebbe in realtà non funziona quando la scrittura del programma per uso pubblico.
Quindi, puoi procurarti ~/.bash_profile
se pensi che funzionerà. Ma, qui, non si tratta se siamo in grado di eseguire il source di un file, si tratta di come le cose dovrebbero funzionare nel sistema: il concetto di design . In breve: dovremmo vedere bash
come qualcosa che ha 2 ruoli: shell e linguaggio di programmazione . Quindi tutto sarà molto più facile da capire.
.bashrc
ha una linea che ne impedisce l'esecuzione in shell non interattive.