152 votes

Comment faire fonctionner zsh en tant que shell de connexion sur Mac OS X (dans iTerm) ?

Lorsque zsh est configuré en tant que shell de connexion sous Mac OS X, lorsqu'il est lancé par iTerm, zsh ne considère pas qu'il est exécuté en tant que shell de connexion, bien qu'il soit lancé par '-zsh' ('-' est placé comme premier caractère de arg[0]), ce qui est censé signifier qu'il devrait démarrer en tant que shell de connexion.

Ainsi, lorsque je définis l'interpréteur de commandes de connexion comme étant bash, bash reconnaît ce premier '-' dans $0 et s'exécute en tant qu'interpréteur de commandes de connexion, mais pas zsh, bien qu'il semble qu'il devrait le faire.

Existe-t-il un moyen de faire en sorte que zsh reconnaisse le '-' dans l'arg[0], ou de faire en sorte que iTerm lance le shell avec un argument de ligne de commande --login ?

2 votes

Je sais que cela fait un moment que cette question a été posée, mais veuillez envisager d'accepter la réponse de @Harold Putman. C'est la seule qui répond à la question posée.

222voto

Damien Wilson Points 2558
chsh -s $(which zsh)

Vous serez invité à saisir votre mot de passe, mais une fois que vous aurez mis à jour vos paramètres, toutes les nouvelles sessions iTerm/Terminal que vous lancerez sur cette machine utiliseront zsh par défaut.

2 votes

S'il vous plaît, lisez d'abord la question. Le problème ne réside pas dans la définition du shell par défaut, mais dans le fait que zsh ne détecte pas qu'il est lancé en tant que shell de connexion.

1 votes

Ah, mes excuses. Avez-vous essayé d'utiliser le drapeau -i pour forcer zsh à démarrer en mode interactif ?

11 votes

Sa réponse permet de faire fonctionner zsh comme un shell de connexion sur Mac OS X dans iTerm. Mais elle ne s'y prend pas de la manière dont vous l'avez décrite. Mais elle résout le problème que votre question (dans le titre, plutôt que dans le corps) présente. La question que vous terminez dans le corps du texte est une question complètement différente. Si c'est votre vraie question (plutôt que de savoir comment faire fonctionner zsh en tant que shell de connexion), vous devriez peut-être reformuler la question dans le titre.

114voto

Harold Putman Points 321

Dans iTerm -> Préférences -> Onglet Profils -> Section générale, réglez la commande sur : /bin/zsh --login

/bin/zsh --login

1 votes

L'iterm2 ne semble pas avoir cette option dans l'onglet Général. Une idée sur la façon de réaliser dans iterm2 sans changer le shell de connexion ?

6 votes

C'est l'onglet général de l'onglet Profils.

0 votes

Aha ! C'est déroutant qu'il y ait à la fois un onglet Général et un Profils > Général.

60voto

Arunkumar Points 31

Allez à la Utilisateurs et groupes du volet de l Préférences du système -> Sélectionnez l'utilisateur -> Cliquez sur le verrou pour effectuer des modifications (coin inférieur gauche) -> cliquez à droite sur l'utilisateur actuel et sélectionnez Options avancées... -> Sélectionnez le Login Shell : /bin/zsh et OK

3 votes

Cela a sauvé ma journée. Je suis sur osx mavericks.

0 votes

Cela fonctionne pour le zsh par défaut mais pas pour celui installé par brew.

17voto

Brian Agnew Points 143181

Avez-vous essayé de modifier l'entrée du shell dans paramètres du compte .

Allez dans les préférences Comptes, déverrouillez, et cliquez avec le bouton droit de la souris sur votre compte utilisateur pour le Paramètres avancés dialogue. Votre interpréteur de commandes devrait être /bin/zsh, et vous pouvez modifier cette invocation de manière appropriée (c'est-à-dire ajouter l'argument --login).

0 votes

Malheureusement, ça ne marche pas : Je peux définir l'interpréteur de commandes de mon choix à l'aide de chsh (à condition que cet interpréteur soit répertorié dans /etc/shells), mais il est impossible d'ajouter des arguments de ligne de commande à l'interpréteur de commandes dans la boîte de dialogue des préférences avancées (iTerm ne parvient pas à démarrer l'interpréteur de commandes).

0 votes

Certaines syntaxes ont été modifiées dans OS X, mais l'essentiel est de définir l'interpréteur de commandes par défaut comme /bin/zsh, comme Brian l'indique ci-dessus.

7 votes

J'aime SO. Je viens d'utiliser cette réponse et j'ai réalisé que je l'avais écrite il y a presque 4 ans !

-3voto

Robin Klose Points 41

Utilisez le login pour créer un shell de connexion. Supposons que l'utilisateur auquel vous voulez vous connecter possède le nom d'utilisateur Alice et que zsh est installé dans /opt/local/bin/zsh (par exemple, une version plus récente installée via MacPorts). Dans iTerm 2, allez dans Préférences, Profils, sélectionnez le profil que vous voulez configurer, et entrez dans Commande :

login -pfq Alice /opt/local/bin/zsh

Voir man login pour plus de détails sur les options.

0 votes

Ce n'est pas du tout une réponse. Oui, cela changera le shell que vous lancez par défaut, mais ce n'est pas une réponse à la question de savoir comment créer une instance de "login" d'un shell, c'est à dire une ressource de toutes les variables à partir de zéro.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X