Come posso passare da una shell sconosciuta a bash?


41

Sono stato sorpreso di non aver trovato questa domanda già sul sito. Quindi, oggi è $venuto dopo che ho effettuato l'accesso come nuovo utente. Ciò è stato inaspettato perché il prompt del mio utente principale inizia con username@computername:~$.

Quindi, come posso passare da quest'altra shell a bash?


8
Solo perché è $venuto fuori piuttosto che username@computername:~$non significa che non è stato bash. L'esatta formattazione del prompt è impostata dalla variabile PS1, che può essere impostata o personalizzata in modo diverso per utenti diversi.
frabjous,

3
@mouche Re: @frabjous echo $SHELLper scoprire qual è la tua shell attuale.
xenoterracide,

1
@mouche @frabjous e iniziare con $ è in realtà comune per bash, alcune shell non bash come zsh usano% out of the box, credo che altre shell usino altre cose.
xenoterracide,

1
Essere @mouche /bin/shspesso non significa molto che di solito è un link simbolico a qualcos'altro. Scriverei ls -l /bin/shper vedere a cosa serve un link simbolico. In alcuni casi, essere un link simbolico a qualcosa cambia il suo comportamento, non credo che bash sia così.
xenoterracide,

3
@xenoterracide - L'uso di bashas /bin/sh disabilita molte funzionalità di bash (passa alla modalità di conformità POSIX).
Chris Down,

Risposte:


61

Supponendo che la shell sconosciuta supporti l'esecuzione di un comando assoluto, è possibile provare: /bin/bash

Per cambiare la shell predefinita, vorrei usare chsh(1). Esempio di utilizzo:chsh -s /bin/bash $USER


1
Chsh cambia permanentemente la shell o solo per la sessione corrente?
mouche,

10
@mouche in modo permanente; cambia la tua entrata in/etc/passwd
Michael Mrozek

@mouche, chsh(1)consentirà solo di passare a una shell elencata in /etc/shells(ed è disponibile, presumibilmente). chsh -lelenca le alternative. Fai attenzione, alcuni (come nologin) sono definiti per account che non dovrebbero mai essere utilizzati per il login (bel modo per bloccarti), potrebbero esserci aggiunte locali per usi speciali.
vonbrand,

19

Digiti bash. Se vuoi che sia permanente, modifica la shell predefinita /bin/bashmodificandola /etc/passwd.

Ecco alcuni frammenti dal mio /etc/passwd:

avahi:x:84:84:Avahi daemon:/:/bin/false
xenoterracide:x:1000:100::/home/xenoterracide:/bin/zsh
postgres:x:88:88::/var/lib/postgres:/bin/zsh
bob:x:1001:1001::/home/bob:/bin/bash
usbmux:x:140:140:usbmux user:/:/sbin/nologin

L'ultimo campo contiene la shell, la modifica del campo dopo l'ultimo :a una shell valida o non valida funzionerà. /bin/falseed /sbin/nologinentrambi significano che l'utente non ha una vera shell di accesso, anche se se pam non è impostato correttamente questo non significa che non possono accedere (ho segnalato un bug su questo in Arch Linux, perché puoi accedere graficamente senza avere una shell di login). /bin/bashe /bin/zshsono entrambe shell valide, vedi /etc/shellsun elenco di shell valide sui tuoi sistemi. Ecco il mio /etc/shellsse sei interessato.

/bin/sh
/bin/bash
/bin/ksh
/bin/zsh
/bin/dash

Sì, puoi usare chsho usermodfare le stesse cose, ricorda che questi sono solo file di testo strutturati e TIMTOWTDI.


11
Probabilmente vuoi usare chshinvece di modificare manualmentepasswd
Michael Mrozek

@Michael ci sono circa 5 (POOMA) modi diversi per cambiare la shell in /etc/passwdcui non avevo voglia di elencare nessuno di loro, perché lo faccio sempre manualmente. chsh e usermod possono entrambi farlo.
xenoterracide,

Fare casino con i file di configurazione è una Bad Idea (TM), un errore potrebbe rendere il sistema inutilizzabile. Sì, è spesso l'unico / il modo più veloce, ma poi lo fa con estrema cura .
vonbrand,

12

Se chsh o la modifica manuale della configurazione non funzionano, ma uno script ~ / .profile viene eseguito all'accesso, aggiungi questa riga:

exec /bin/bash --login

Dopo aver guardato in giro per un po ', questa era la soluzione di cui avevo bisogno. Grazie!
PearsonArtPhoto

Ottima idea, specialmente se la shell ha selezionato il file all'avvio ...
vonbrand,

touch ~/.bash_profileo altrimenti bash si eseguirà in un ciclo: bash prende ~/.profilenel caso in cui ~/.bash_profilenon esista.
Har-Wradim,
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.