Perché non riesco a cambiare la shell con il comando chsh?


12

Ho imparato un nuovo comando, almeno ho pensato, perché questo comando chsh:, non si comporta come descritto.

È stato descritto per funzionare in questo modo:

  1. cat /etc/shells per sapere quali shell sono installate, in modo da poter scegliere tra di esse.
  2. fai echo $SHELLsapere, quale shell si sta utilizzando.
  3. scegli una delle conchiglie e digita chsh -s /path/to/shell
  4. inserisci la password e verifica con echo $SHELL, che sei in una nuova shell.

Ho fatto questo e non ho ricevuto nessun messaggio di errore durante l'inserimento della password, ma ero ancora nella stessa shell.

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash

5
Devi prima disconnetterti e riconnetterti.
Rui F Ribeiro,

7
Si prega di non pubblicare immagini di testi terminali. Può essere copiato e incollato nel corpo della tua domanda e non c'è davvero bisogno di pubblicare immagini, a meno che tu non mostri un glitch grafico o qualcosa di simile.
Sergiy Kolodyazhnyy,


Ho modificato il mio post, ho eliminato l'immagine e incollato il testo, ma l'immagine è tornata durante la notte.
Sharkant,

@sharkant Sembra che qualcuno abbia avuto una modifica in una coda di recensioni e sia stata approvata, che ha modificato il tuo post dopo il fatto. Pensavo che il sistema di editing di SE non avrebbe sovrascritto una nuova modifica con una vecchia, ma eh, chi lo sa?
Zan Lynx,

Risposte:


19

Disconnettersi e riconnettersi.

Il chshcomando aggiorna il /etc/passwdfile, ma non modifica la shell corrente né il valore della $SHELLvariabile nella shell corrente (non ha modo di farlo). Questo è il motivo per cui è necessario accedere nuovamente; devi avviare una nuova sessione di accesso per rendere effettiva una modifica.


Non capisco cosa sia una shell di accesso e come so se mi trovo in una shell di accesso o in qualche tipo di shell di accesso. Come posso iniziare una nuova sessione di accesso?
Sharkant,

1
@sharkant Il punto è che le informazioni modificate in /etc/passwdnon vengono lette fino al prossimo accesso. Dovrai disconnetterti completamente ed eseguire nuovamente l'accesso per rendere effettive le modifiche. In caso contrario, anche il riavvio della macchina funzionerà.
Kusalananda

1
Penso di averti capito questa volta: quindi il comando chsh -s / path / to / shell non cambia immediatamente la shell in cui mi trovo, ma cambia una voce dentro / etc / passwd che avrà effetto quando avvierò la shell?
Sharkant,

@sharkant È esattamente così che funziona! Sono felice di aver finalmente capito il tuo malinteso. Aggiornerò la risposta.
Kusalananda

1

L'uso del comando utility usermod ha funzionato nel mio caso. In esecuzione su Ubuntu 18.04.

  1. Innanzitutto, controlla il valore corrente

grep nameofuser /etc/passwd

  1. cambiarlo

sudo usermod --shell /bin/bash nameofuser

  1. Verificarlo

grep nameofuser /etc/passwd

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.