J'utilise les ordinateurs de mon école et j'aimerais utiliser zsh
au lieu de bash
. J'aimerais en faire le shell par défaut, mais je ne peux pas exécuter une commande telle que, $ chsh -s $(which zsh)
car je ne dispose pas de privilèges d'administrateur.
Existe-t-il un moyen de mettre quelque chose dans mon .bashrc
ou quelque chose qui appelle automatiquement zsh
quand il ouvre une solution de contournement?
Pour clarifier, zsh
est déjà installé.
zsh
le.bashrc
fichier. Déconnectez-vous et connectez-vous et c'est fait!zsh
sur la première ligne?bash
est appelé explicitement. Mieux vaut le placer à la.bash_profile
place.Réponses:
Créez
.bash_profile
dans votre répertoire personnel et ajoutez ces lignes:Mise à jour:
.profile
peut fonctionner comme une solution générale lorsque le shell par défaut n'est pas bash. Je ne sais pas si.profile
Zsh peut également appeler cela, mais nous pouvons le faire en toute sécurité avec un simple contrôle:Nous pouvons également utiliser
which
pour obtenir le chemin dynamiquezsh
dont dépend la valeur de$PATH
:la source
.bash_profile
ne sera pas référencé. Que diriez-vous de mettre cela à la.profile
place.profile
n'a pas fonctionné. Aussi ne serait pas.profile
appelé parZsh
? Cela pourrait devenir redondant. Je n'ai pas encore vérifié. (Mise à jour: cela fonctionnait maintenant, je ne savais pas quelle erreur j'avais commise auparavant.) Avez-vous des idées sur les inconvénients possibles de l'utilisation.profile
?.profile
s'il.bash_profile
n'existe pas (à moins que vous ne le sourceiez manuellement.bash_profile
, bien sûr). Plus précisément, les sources de bash le premier des fichiers [.bash_profile
>.bash_login
>.profile
] il trouve. Il recherche uniquement.profile
une fonctionnalité de compatibilité POSIX (Bourne Shell).zsh
..bash_profile
et.profile
n'a pas fonctionné (les fichiers n'ont même pas été exécutés, Fedora 26 sur un ordinateur d'université).Normalement, vous pouvez utiliser en
chsh
tant qu'utilisateur non root. Mais il est parfois désactivé, généralement sur les sites utilisant une forme de base de données d'utilisateurs en réseau, telle que NIS et LDAP. Il pourrait y avoir unypchsh
(NIS) ouchsh.ldap
(LDAP) à la place.chsh
n'autorisera généralement que quelques coquilles approuvées , généralement celles énumérées dans/etc/shells
.Si vous ne pouvez pas utiliser
chsh
ni ses variantes sur votre site, organisez votre shell de connexion surexec
votre shell favori et définissez laSHELL
variable de manière à pointer sur votre shell favori.Si votre shell de connexion est
sh
,dash
ouksh
: le fichier que vous devez modifier est~/.profile
. Veillez à ce que ce fichier soit lu au début d’une session interactive ainsi que par certains scripts de démarrage de session non interactifs (par exemple, pour les sessions X11), vous devez donc faire attention: seul appelexec
(qui remplace le processus en cours) lorsque le processus en cours est activé. shell est interactif. À l'exception du shell Bourne (version/bin/sh
de Solaris 10 et antérieure), vous pouvez savoir qu'un shell est interactif en raison de la présence dei
dans la liste d'options ($-
).Si vous voulez que zsh vous lise
.zprofile
, passez l'-l
option.Si votre shell de connexion est
bash
, vous pouvez procéder comme ci-dessus. Alternativement, vous pouvez mettre ces commandes dans~/.bash_profile
. La plupart des scripts de démarrage de session ne font que lire~/.profile
et pas~/.bash_profile
, mais j'en ai vu qui fonctionnent sous bash et en lecture.bash_profile
, aussi, même là, vous devriez faire attention à ne pas appelerexec
un shell non interactif.Si votre shell de connexion est csh ou tcsh, voir un exemple dans Modification du shell par défaut sans privilèges chsh ou administrateur.
la source
Je crois que la commande
chsh
est dans ce but précis. Bien que, je ne suis pas sûr que chaque distribution Linux / Unix le supporte. Consultez la page de manuel dechsh
.la source
passwd -s
.Si vous ne pouvez pas courir
chsh
parce que vous n'avez pas les privilèges d'administrateur, parlez à quelqu'un qui en a .Très probablement, vous ne pouvez pas utiliser en
chsh
tant que non-root car le système que vous utilisez est configuré pourchsh
ne pas fonctionner, par exemple parce que le système utilise NIS ou LDAP plutôt que simplement le/etc/passwd
fichier. Ou peut-être l'administrateur de votre système veut-il simplement garder un certain contrôle.La procédure de modification de votre shell dépend des stratégies de votre organisation. Il peut y avoir une commande locale qui fait ce que fait
chsh
normalement. Ou vous devrez peut-être soumettre un ticket de support demandant un changement de shell.La plupart des autres réponses sont bonnes, mais si vos administrateurs sont raisonnablement réactifs, vous ne voudrez peut-être pas déranger vos scripts de démarrage. J'appellerais probablement juste
zsh -l
manuellement après la connexion, jusqu'à ce que l'administrateur se mette à jour pour mettre à jour mon compte.Une autre chose à garder à l’esprit: Parfois, différents shells peuvent utiliser les mêmes fichiers de démarrage. Par exemple,
sh
etbash
peut à la fois exécuter$HOME/.profile
, etcsh
ettcsh
peut à la fois exécuter$HOME/.login
et$HOME/.cshrc
(bien que des fichiers de démarrage spécifiques à un shell.bashrc
, tels que.bash_profile
, et.tcshrc
puissent les remplacer). Si votre shell par défaut est/bin/csh
et que vous souhaitez l'utiliser/bin/tcsh
, la mise.login
à jour de votre appel à/bin/tcsh -l
créer peut créer une boucle infinie.zsh
n'arrive pas à exécuter desbash
fichiers de démarrage spécifiques, ce n'est donc pas un problème pour vous.La plupart des shells définir des variables qui identifient shell que vous êtes en cours d' exécution (
$BASH_VERSION
,$tcsh
,$ZSH_VERSION
). Si vous envisagez d'écrire du code de démarrage pour appeler votre shell préféré, ce n'est pas une mauvaise idée de l'inclure dans unif
fichier pour qu'il ne soit exécuté que si vous n'exécutez pas déjà ce shell. En utilisant le code de la réponse de konsolebox :(La complication ajoutée de la vérification au
"${ZSH_VERSION:-unset}"
lieu de simplement"$ZSH_VERSION"
permettre la possibilité que vous avez faiteset -o unset
, une option qui fait qu'une référence à une variable non définie est une erreur.)la source
Je peux penser à quelques scénarios.
zsh
n'est pas/etc/shells
présent et l'OP souhaite l'utiliser sans avoir à taperzsh
à l'invite de commande. Solutions possibles.a) utilise des astuces de profil pour l'exécuter à la connexion. C’est aussi efficace que de changer de coque.
b) prie l'admin d'ajouter
zsh
afin/etc/shells
que vous puissiez lechsh
fairec) prie l'administrateur de changer votre shell. ce n’est pas sage, car vous perdrez votre capacité à
ftp
utiliser. Vous ne pouvez l’utiliser queftp
si vous avez un shell/etc/shells
l'utilisateur souhaite échapper à un shell restreint, le plus probable
rbash
oursh
.Si
.profile
est éditable, lePATH
peut être développé en le modifiant. Une fois/bin
dans le chemin, vous pouvez commencerbash
de l'intérieurrsh/rbash
, en accédant à lachsh
commande pour vous permettre de changer de shell. De nombreuses commandes ont des échappements de shell qui peuvent être utilisés pour échapper à un shell restreint et y accéder à nouveauchsh
.chsh
ne fonctionne vraiment pas pour une autre raison. La solution a de la possibilité 1 est une réponse ici aussi.Le scénario 2 est la seule raison pour changer réellement le shell par défaut (c'est trop restrictif).
la source
Je ne pense pas que la réponse fournie constitue réellement
zsh
le shell par défaut. Cela change simplement le shell en zsh dès que l'utilisateur se connecte à son shell par défaut . L'utilisateur va toujours se connecter à son compte,DEFAULT SHELL
mais avec cela, le shell changera pourzsh
Pour changer l'utilisation du shell par défaut:
Vous devriez être root pour le faire.
Sinon, la solution de contournement ci-dessus vous sera utile.
Ajouté du commentaire
et il peut être invoqué par l'utilisateur pour lui-même.
la source
chsh -s /path/to/zsh
est plus standard et ne nécessite généralement pas (mais pas toujours) un accès root, contrairement àusermod
ce qui est toujours le cas. Votre réponse a donc plus de problèmes que ce que la question dit déjà comme ne fonctionnant pas.