Storicamente, i file del profilo ( /etc/profilee ~/.profile) sono stati invocati quando si è effettuato l'accesso (sulla console di testo, cos'altro?) E sono stati offerti molti scopi:
- Impostare le variabili di ambiente e altri parametri (ad esempio umask) per la sessione.
- Esegui programmi extra all'inizio della sessione (ad es. Notifica e-mail).
- Esegui il programma per la sessione, se diverso dalla shell (ad esempio un'altra shell o X Window).
- Impostare i parametri del terminale (ad es
stty.).
- Impostare i parametri della shell (ad es. Alias).
Tutti questi scopi non sono stati identificati come separati fino a dopo. Poiché gli script del profilo possono fare cose che hanno senso solo in una sessione interattiva (interazione terminale, avviare altri programmi), quando è stata introdotta l' invocazione della shell remota ( rsh ), le marche di rsh hanno deciso di non invocare la shell remota come shell di accesso, in modo che gli script del profilo non vengano eseguiti. (Alcune versioni di rshdhanno un'opzione per eseguire la shell remota come shell di login.) Ssh ha copiato questo comportamento per essere un sostituto drop-in per rsh.
Se si desidera eseguire gli script del proprio profilo, è possibile richiamarli in modo esplicito.
ssh 127.0.0.1 '. /etc/profile; . ~/.profile; ydisplay'
Nota il comando .per caricare gli script di profilo all'interno della shell: sono comandi da eseguire all'interno di quella shell, non un programma esterno.
Se si desidera impostare una variabile d'ambiente a livello globale per tutti gli utenti, esiste un altro metodo su molti sistemi: invece di definirla in /etc/profile, definirla in /etc/environment. Questo file viene letto attraverso il pam_envmodulo; la maggior parte delle distribuzioni Linux sono configurate per leggerlo.
Se la shell di accesso è bash, esiste un'ulteriore possibilità. Normalmente, non è necessario impostare le variabili di ambiente in.bashrc (poiché non verranno impostate nelle sessioni X tranne se si passa attraverso un terminale con una shell interattiva, perché non verranno impostate se si accede in modo interattivo su una console di testo o su ssh, perché sovrascriveranno le impostazioni personalizzate se invochi una shell all'interno di un altro programma). Tuttavia, bash ha una strana caratteristica che non ho mai capito: si legge ~/.bashrcin due circostanze non correlate:
- nelle shell interattive che non sono shell di login;
- nelle shell non interattive che non sono shell di login, se bash pensa che sia stato invocato da
rshdo sshd.
Quando si esegue un comando su ssh, ci si trova nel secondo caso. Puoi organizzare la lettura del tuo profilo leggendo /etc/profilee .profileda .bashrc. Includi il seguente codice nel tuo ~/.bashrc:
case $- in
*i*) :;; # this is an interactive shell, fine
*) # This is not an interactive shell! This must be a non-interactive remote shell session.
. /etc/profile; . ~/.profile
return;;
esac
ydisplay? fassh 127.0.0.1 /usr/app/cpn/bin/ydisplayil lavoro?