Come faccio a rendere Bash la mia shell predefinita su Ubuntu?


101

Ho un .bash_profilenella mia directory home, ma non viene eseguito all'accesso. Se faccio quanto segue, allora le cose sembrano essere come mi aspetto:

ssh myhost
bash
source ~/.bash_profile

Ma normalmente succede tutto al login. Pensieri?


3
Assicurati anche di non avere un ~/.profileo ~/.bash_login, poiché solo uno dei tre è di provenienza. (Ho dimenticato l'ordine esatto.)
Grawity

3
Perché hai una domanda diversa nel titolo e una diversa nel corpo del tuo post?
pabouk,

Risposte:


170

Uso:

chsh

Immettere la password e indicare il percorso della shell che si desidera utilizzare.

Per Bash sarebbe /bin/bash. Per Zsh sarebbe /usr/bin/zsh.


15
+1 - non so perché l'OP abbia deciso che modificare il file delle password fosse una scelta migliore, ma questa è la risposta migliore
kdgregory

1
Sì, battimi, questo è il modo standard.
John T,

1
E su Ubuntu il percorso della shell che vuoi usare è ... / bin / bash (e / bin / sh non è lo stesso)
Harry Wood

49
Oppure puoi usaresudo chsh -s /bin/bash username
Oleg Vaskevich il

7
È necessario disconnettersi e riconnettersi per vedere questa modifica.
Neil Traft,

37

Oltre alla risposta di Akira, puoi anche modificare il tuo file / etc / passwd per specificare la tua shell predefinita.

Troverai una linea come questo esempio:

john:x:1000:1000:john,,,:/home/john:/bin/sh

La shell è specificata alla fine.


8
Meglio usare il comando 'chsh' come suggerito da Akira - meno possibilità di rovinare qualcosa per errore.
Lars Haugseth,

5
per non parlare di 'chsh' è disponibile quando non è possibile scrivere su / etc / passwd
quack quixote

1
Ma se hai così accesso alla modifica di /etc/passwde stai attento, la risposta di John sta facendo buon uso degli strumenti forniti dal sistema.
AJP,

3
È necessario disconnettersi e riconnettersi per vedere questa modifica.
Neil Traft,

2
Se stai eseguendo un server senza password utente - fornendo accesso solo tramite chiavi ssh pubbliche / private ... ha anche molto senso. chsh richiede una password.
Keith John Hutchison,

4

È possibile controllare il programma terminale. Potrebbe essere configurato per eseguire / bin / sh anziché / bin / bash

Bash esegue .bash_profile solo per sessioni di accesso. .bashrc viene eseguito per tutte le sessioni bash, non solo per le sessioni di accesso. Prova a trovare .bash_profile da .bashrc (evita la dipendenza circolare!) O configura il tuo programma terminale per eseguire / bin / bash -l come programma shell.


2
il programma terminale non ha nulla a che fare con il problema perché è lo sshd sul computer remoto che genera la nuova shell.
Akira,

3

Abilita bash:

$ /bin/bash

Cambia shell per l'utente:

$ sudo usermod -s /bin/bash username

dove:

  -s, --shell SHELL             new login shell for the user account

2
(1) Cosa intendi con "abilita bash"? (2) L'utente desidera modificare la propria shell di accesso su un sistema remoto. Perché pensi che abbia sudoaccesso a quel sistema? Perché fornisci istruzioni in termini di modifica della shell di accesso di un altro utente?
G-Man,

L'uso di chsh (come suggerito sopra) non ha funzionato per me. Questo comando ha fatto!
Per Lindberg,

2

Un'alternativa è rinominare lo script di avvio in .profile. Questo file è stato creato dalla maggior parte delle shell Unix .


1

Per rendere qualsiasi shell predefinita, verifica innanzitutto che sia installata e riconosciuta sul tuo computer guardando il contenuto di /etc/shells:

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/fish

Quindi utilizzare chshper modificare la shell:

$ sudo chsh -s /usr/bin/bash $(whoami) # or sudo chsh -s /bin/bash $(whoami)

Riferimenti

  1. https://linux.die.net/man/1/cat
  2. https://linux.die.net/man/1/whoami
  3. https://linux.die.net/man/5/shells
  4. https://linux.die.net/man/1/chsh

0

Non ci sono abbastanza informazioni nella tua domanda da dire con certezza, ma ho già riscontrato lo stesso problema. Supponendo che tu abbia già / bin / bash impostato nella tua password, potrebbe essere il modo in cui il tuo terminale si avvia.

Se stai cercando di avviare un terminale GUI, supponi gnome-terminalche potresti aspettarti che la shell legga i tuoi file di avvio di bash. Tuttavia, ciò non accade su Ubuntu e forse altri sistemi per impostazione predefinita.

Il modo in cui l'ho risolto su Ubuntu è modificare le preferenze di gnome-terminal e impostare il comando di avvio su bash -l. -lè l'abbreviazione di --login. Questo dice a bash di avviarsi come shell di login, il che gli fa caricare gli script di avvio quando si accede tramite ssh.

Sono sicuro che ci sia una buona logica per essere così com'è, ma l'ho trovato sorprendente e un po 'più fastidioso dato che condivido gli stessi profili su sistemi Linux, Cywgin e Macos.

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.