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.
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.
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"fifiesac
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
ldapmodify
pourrait fonctionner.ypchsh
devrait être la commande appropriée.set filec
etset autolist
.Réponses:
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
à
.cshrc
. (Assurez-vous de le remplacer/path/to/bash
par un vrai chemin, bien sûr. Il pourrait même s'agir d'une versionbash
qui 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.cshrc
possible afin d'éviter tout.cshrc
traitement supplémentaire qui deviendra théorique une foisbash
lecsh
processus remplacé .la source
Vous pouvez simplement vous connecter avec
pour exécuter le shell Bash automatiquement lorsque vous vous connectez.
Dans les commentaires ci-dessous, vous pouvez voir l'alternative
exec
exécutera un nouveau processus et quittera l'ancien, de sorte que lecsh
processus 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.la source
ssh -t yourhost exec -a bash -l bash
pour remplacer complètement le shell d'origine, plutôt que de s'exécuter en tant que processus à l'intérieur du shell initial.ssh -t host bash
solution simple dans une situation similaire, mais votre chemin est meilleur. Je n'y ai pas pensé duexec
tout, merci! Je mettrai à jour le message avec votre suggestion.bash
commande intégréeexec
.-a
et-l
. Je vais modifier l'exemple dans ma réponse.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.
la source
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
la source