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.

mcandre
la source
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é .

jjlin
la source
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.

Daniel Andersson
la source
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
MattC
la source
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

user454581
la source