Comment changer mon shell par défaut en bash si je n'ai pas accès à chsh ni / etc / passwd?


8

Je travaille sur un compte Linux distant à l'université, et le shell par défaut est malheureusement cshsans tabulation. Comment changer le shell par défaut de mon compte en bash? chshn'est pas disponible.


1
Quel système l'université utilise-t-elle pour stocker les comptes? ldapmodifypourrait fonctionner.
user1686

Ou, s'ils utilisent NIS, ypchshdevrait être la commande appropriée.
m000

Si vous voulez juste compléter la tabulation, vous pouvez les ajouter à vos ~ / .cshrc set filecet set autolist.
Hennes

Réponses:


11

Vous devriez probablement essayer de demander à vos administrateurs système s'ils peuvent changer votre shell par défaut pour vous. S'ils ne peuvent pas ou ne veulent pas (comme c'était le cas lorsque j'étais à l'université), la solution de contournement que j'ai utilisée était d'ajouter

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

à .cshrc. (Assurez-vous de le remplacer /path/to/bashpar un vrai chemin, bien sûr. Il pourrait même s'agir d'une version bashqui réside dans votre répertoire personnel, si la version fournie par le système est trop obsolète à votre goût.) Pour l'efficacité, il est préférable de le faire le plus tôt .cshrcpossible afin d'éviter tout .cshrctraitement supplémentaire qui deviendra théorique une fois bashle cshprocessus remplacé .


Cela n'a pas fonctionné pour moi à mon université. Je vais probablement devoir parler au sysadmin.
2rs2ts

3

Vous pouvez simplement vous connecter avec

ssh -t yourhost bash

pour exécuter le shell Bash automatiquement lorsque vous vous connectez.


Dans les commentaires ci-dessous, vous pouvez voir l'alternative

ssh -t yourhost exec bash

execexécutera un nouveau processus et quittera l'ancien, de sorte que le cshprocessus se terminera directement.

S'il est ajouté -là la fin de la commande en tant qu'argument à Bash, il sera traité comme un shell de connexion, mais ce n'est peut-être pas nécessaire.


1
ssh -t yourhost exec -a bash -l bashpour remplacer complètement le shell d'origine, plutôt que de s'exécuter en tant que processus à l'intérieur du shell initial.
chepner

@chepner: Intéressant, j'utilise moi-même une ssh -t host bashsolution simple dans une situation similaire, mais votre chemin est meilleur. Je n'y ai pas pensé du exectout, merci! Je mettrai à jour le message avec votre suggestion.
Daniel Andersson

Cependant, j'ai eu un peu d'imagination en utilisant des arguments pour la bashcommande intégrée exec.
chepner

@chepner: Ah oui, je l'ai essayé maintenant sur un hôte avec zsh comme shell par défaut et il échoue sur les deux -aet -l. Je vais modifier l'exemple dans ma réponse.
Daniel Andersson

0

La meilleure solution que j'ai trouvée était une sur stackexchange. Voici le lien stackexchange et voici la solution:

créez un fichier .profile dans votre répertoire personnel et collez ce qui suit, ou ajoutez-le à la fin de votre .profile si vous en avez déjà un.

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

j'ai beaucoup cherché lorsque vous utilisez l'authentification LADP via PAM, je pense que la meilleure solution est de mettre SHELL = / bin / bash exec / bin / bash dans le fichier .profile dans votre répertoire personnel

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.