Come posso cambiare la mia shell predefinita in bash se non ho accesso a chsh né a / etc / passwd?


8

Sto lavorando su un account Linux remoto universitario, e la shell predefinita è purtroppo cshsenza il completamento della scheda. Come posso modificare la shell predefinita del mio account in bash? chshNon è disponibile.


1
Quale sistema utilizza l'università per archiviare gli account? ldapmodifypotrebbe funzionare.
user1686

Oppure, se utilizzano NIS, ypchshdovrebbe essere il comando corretto.
m000,

Se si desidera solo il completamento della scheda, è possibile aggiungerli a ~ / .cshrc set filece set autolist.
Hennes,

Risposte:


11

Probabilmente dovresti provare a chiedere ai tuoi amministratori di sistema se possono cambiare la shell predefinita per te. Se non possono o non lo faranno (come nel caso del college), la soluzione che ho usato è stata quella di aggiungere

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

a .cshrc. (Assicurati di sostituire /path/to/bashcon un percorso reale, ovviamente. Questa potrebbe anche essere una versione bashche risiede nella tua home directory, se la versione fornita dal sistema è troppo obsoleta per i tuoi gusti.) Per efficienza, è meglio per farlo il più presto .cshrcpossibile, in modo da evitare ulteriori .cshrcelaborazioni che diventeranno discutibili una volta bashsostituito il cshprocesso.


Questo non ha funzionato per me nella mia università. Probabilmente dovrò parlare con l'amministratore di sistema.
ore 2

3

Potresti semplicemente connetterti con

ssh -t yourhost bash

per eseguire automaticamente la shell Bash al momento del login.


Dai commenti qui sotto puoi vedere l'alternativa

ssh -t yourhost exec bash

execeseguirà un nuovo processo e uscirà da quello vecchio, quindi il cshprocesso uscirà direttamente.

Se accoda -lalla fine del comando come argomento per Bash, verrà trattato come una shell di login, ma forse non è necessario.


1
ssh -t yourhost exec -a bash -l bashper sostituire completamente la shell originale, anziché eseguirla come processo all'interno della shell iniziale.
Chepner,

@chepner: Interessante, sto usando ssh -t host bashio stesso una soluzione semplice in una situazione simile, ma la tua strada è migliore. Non ci ho pensato execaffatto, grazie! Aggiornerò il post con il tuo suggerimento.
Daniel Andersson,

Ho avuto un po 'di fantasia, usando argomenti per il bashcomando integrato exec.
Chepner,

@chepner: Ah sì, l'ho provato ora su un host con zsh come shell predefinita e non riesce su entrambi -ae -l. Modificherò l'esempio nella mia risposta.
Daniel Andersson,

0

La migliore soluzione che ho trovato è stata una su stackexchange. Ecco il link stackexchange ed ecco la soluzione:

crea un file .profile nella tua home directory e incolla quanto segue, oppure aggiungi alla fine del tuo .profile se ne hai già uno.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

0

ho cercato molto quando si utilizza l'autenticazione LADP tramite PAM, penso che la soluzione migliore sia inserire SHELL = / bin / bash exec / bin / bash nel file .profile nella home directory dell'utente

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.