Qual è la differenza tra un 'Login' e un bash shell 'Interactive'


50

Qual è la differenza tra un 'Login' e un bash shell 'Interactive'? Ho citato Wikipedia di seguito, ma qualcuno può dare una risposta migliore?

EDIT: Questa è una wiki della comunità, quindi forse piuttosto che votare per chiudere potresti fornire esempi di quali situazioni richiedono quale tipo di $ SHELL

Script di avvio

All'avvio di Bash, esegue i comandi in una varietà di script diversi.

Quando Bash viene invocato come shell di login interattiva, legge innanzitutto ed esegue 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.

Quando esce una shell di login, Bash legge ed esegue i comandi dal file ~ / .bash_logout, se esiste.

Quando viene avviata una shell interattiva che non è una shell di accesso, Bash legge ed esegue i comandi da ~ / .bashrc, se quel file esiste. Questo può essere inibito usando l'opzione --norc. L'opzione --rcfile forzerà Bash a leggere ed eseguire i comandi dal file invece di ~ / .bashrc.


Ho modificato la domanda per adattarla maggiormente alle regole del sito a metà percorso. Non credo che capirò mai il desiderio di cancellare informazioni utili ...
Gareth,

7
Perché le persone votano questa domanda? Mi sembra perfettamente legittimo?
duffbeer703,

2
Uffa, togli la risposta dalla tua domanda e pubblicala come risposta. Va bene rispondere alla tua domanda.
derobert,

2
È una domanda molto valida in quanto la distinzione è confusa. Si noti ad esempio che quando si accede a un ambiente grafico tramite xdm ed si esegue xterm, si ottiene una shell interattiva e i file di avvio della shell di accesso non vengono eseguiti.
pjc50,

Risposte:


16

Nei file di profilo della shell di accesso è possibile impostare alcune cose che verranno utilizzate durante la sessione e che devono essere eseguite una sola volta. Qualche idea:

  • creare un file temporaneo contenente l'indirizzo IP da cui ci si è connessi, successivamente è possibile includerlo in alcuni script che impostano le regole del firewall.
  • eseguire ssh-agent, richiedere le chiavi SSH e archiviare le variabili di ambiente dell'agente SSH in un file.
  • se si tratta di una macchina limitata e i tuoi colleghi vogliono essere a conoscenza degli accessi reciproci, scrivi (1) messaggi per informarli del tuo accesso.

Nei file di una shell non di accesso ( .bashrc) è necessario configurare la shell:

  • Prompt di fantasia
  • impostare alias
  • imposta le opzioni della cronologia
  • definire funzioni di shell personalizzate
  • esportare le variabili di ambiente, (forse PAGER, EDITOR se le impostazioni a livello di sistema fanno schifo)
  • carica variabili ssh-agent salvate in .bash_profile

Di solito, includeresti .bashrcda .bash_profilequanto segue. Quindi la shell di accesso ottiene tutte le personalizzazioni e il .bash_profilefile non deve duplicare elementi già presenti .bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc

3
Una shell di accesso è la prima che si avvia quando sei fresco sulla macchina? Tutte le altre shell che si aprono dopo possono essere o meno interattive. Una shell in esecuzione da cron? Non sembra interattivo, ma è login? Cosa succede se non sei sulla macchina? Queste sono le domande che rimangono senza risposta
François Beausoleil,

4
Ora, QUESTA è una risposta che posso capire: linuxquestions.org/questions/linux-general-1/…
François Beausoleil
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.