Cos'è la shell predefinita per il terminale?


51

Diciamo che ho aperto un terminale e inserito / eseguito alcuni comandi di shell.

Ma non ho invocato esplicitamente Bash o qualsiasi altra shell.

Quale shell è stata utilizzata per impostazione predefinita?

Risposte:


51

Quello specificato sulla tua linea in /etc/passwd(è una :linea separata e la shell è quella finale).

Ad esempio il mio:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

Eccolo /bin/bash(il default di Ubuntu)

Puoi anche usare chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Questo mi sta dicendo che è il mio guscio /bin/bashe mi sta lasciando cambiare.

Infine, echo $SHELLfarà lo stesso:

$ echo $SHELL
/bin/bash

se è bash, perché a volte viene invocato esplicitamente come sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove

Penso che sia un cattivo comando personalmente - niente di tutto ciò richiede nemmeno il root. Se lo facesse , sarebbe meglio scrivere come sudo netstat -an | grep LISTEN | grep -v ^unix. Non vedo alcun motivo per racchiuderlo in una subshell bash.
Cesio

2
@DrStrangeLove: se più di un comando nella pipe necessitava delle autorizzazioni di root, sudo bash -c "..."assicurarsi che l'intera pipe fosse eseguita da root.
Keith Thompson,

Se non sai quali comandi richiedono root (e perché), non dovresti eseguirli. Altrimenti, perché fidarsi di qualsiasi comando / programma / script più del necessario. Se non ci riesci commandA | sudo commandB | commandC, potresti fare un sudo idprimo (esegue il idcomando as root, ma acquisisce anche un token " usa sudo senza richiesta password " che dura per 15 minuti (impostazione predefinita).
waltinator

2
Se si utilizza chshallora è necessario disconnettersi e riconnettersi per vedere questo cambiamento.
Neil Traft,

17

GNU Bash è la shell utilizzata di default nei terminali su Ubuntu. Tuttavia, quando gli script vengono eseguiti all'avvio del sistema, viene utilizzato dash, poiché è dash che è / bin / sh.

Questo è definito nella variabile ambientale $ SHELL. Puoi controllare digitando echo $SHELLnel terminale.


14

digitando quanto segue verrà visualizzata la shell aperta dal terminale:

echo $SHELL

Tuttavia, per scoprire in quale shell sei attualmente (potresti averlo cambiato) digitare

ps -p $$

ad esempio vedrai che la shell è bash nell'output di esempio

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Un altro metodo è usare

echo $0

questo restituirà semplicemente il nome della shell corrente.


+1 per semplicitàecho $0
djthoms il

Bella risposta! Grazie, per qualche motivo l'eco $ SHELL non ha funzionato (sempre usato quello) e le tue due alternative hanno funzionato. Grazie!
Wolfdawn,

3

Di default è bash:

env | grep ^SHELL=

Nella maggior parte dei casi produrrà

SHELL=/bin/bash

Non necessariamente. Se si crea un nuovo utente con useradd, per impostazione predefinita è sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk,

+1, perché sebbene la risposta selezionata richieda meno digitazione, è sempre bello avere più di un modo di fare qualcosa.

2

Per ottenere il percorso del file dell'eseguibile shell corrente si può usare

readlink -f /proc/$$/exe

Alcune possibili uscite sono:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
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.