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

149

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

Ainsi, lorsque je règle le shell de connexion sur bash, bash reconnaît ce premier «-» dans $ 0 et s'exécute comme un shell de connexion, mais pas zsh, bien qu'il semble que ce soit le cas.

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

Ivan Tarasov
la source
2
Je sais que cela fait un moment que cela n'a pas été demandé, mais pensez à accepter la réponse de @Harold Putman. C'est le seul sur lequel répond la question posée.
Craig S.Cottingham

Réponses:

106

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

/ bin / zsh --login

Harold Putman
la source
1
iterm2 ne semble pas avoir cette option dans l'onglet Général. Une idée comment réaliser dans iterm2 sans changer le shell de connexion?
Lloyd Dewolf
6
C'est l'onglet général sur l'onglet Profils.
Harold Putman
Ah! Il est déroutant qu'il existe à la fois un onglet Général et un Profils> Général.
Lloyd Dewolf
2
ou dans mon cas/usr/local/bin/zsh --login
Yar
J'utilise ceci pour changer mon shell plutôt que pour éditer le / etc / shells car cela devrait éviter qu'un problème avec mon shell devienne inutilisable après une mise à jour.
sal
220
chsh -s $(which zsh)

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

Damien Wilson
la source
2
Veuillez d'abord lire la question. Le problème n'est pas de définir le shell par défaut, le problème est que zsh ne détecte pas qu'il est démarré en tant que shell de connexion.
Ivan Tarasov
1
Ah, mes excuses. Avez-vous essayé d'utiliser l'option -i pour forcer zsh à démarrer en mode interactif?
Damien Wilson
11
Sa réponse fait que zsh fonctionne comme un shell de connexion sur Mac OS X dans iTerm. Cela ne se fait tout simplement pas comme vous le décrivez. Mais cela résout le problème que vous remettez en question (dans le titre, plutôt que dans le corps). La question que vous terminez dans le corps est une question complètement différente. Si c'est votre vraie question (plutôt que comment faire fonctionner zsh comme shell de connexion), vous devriez peut-être reformuler la question dans le titre.
iconoclaste
45
Si chshvous indique quelque chose comme "shell non standard", cela signifie que vous devez ajouter le chemin du nouveau shell /etc/shells. Cela peut arriver si vous passez, par exemple, à une version de zsh installée par homebrew, ce qui la place /usr/local/bin/zsh.
shovavnik
1
chsh -s $(which zsh)peut être utilisé pour assurer un chemin correct.
Daniel Doezema
56

Allez dans le volet Utilisateurs et groupes des Préférences Système -> Sélectionnez l'utilisateur -> Cliquez sur le verrou pour apporter des modifications (coin inférieur gauche) -> cliquez avec le bouton droit sur l'utilisateur actuel sélectionnez Options avancées ... -> Sélectionnez le Shell de connexion: / bin / zsh et OK

Arunkumar
la source
3
Cela m'a sauvé la journée. Je suis sur les non-conformistes osx.
cqfd
Cela fonctionne pour le zsh par défaut et non pour celui installé par brew.
Imam Bux
19

La commande pour changer le shell au démarrage est chsh -s <path_to_shell>. Les shells par défaut de mac OS X sont installés dans le binrépertoire, donc si vous souhaitez passer à la valeur par défaut, zshvous utiliserez ce qui suit

chsh -s /bin/zsh

Si vous utilisez une version différente de, zshvous devrez peut-être ajouter cette version à /etc/shellspour éviter le message shell non standard. Par exemple, si vous voulez la version de home-brew de, zshvous devez ajouter /usr/local/bin/zshau fichier susmentionné que vous pouvez faire en une seule commande sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells", puis exécuter

chsh -s /usr/local/bin/zsh

Ou si vous voulez faire le tout en une seule commande, copiez et collez simplement ceci si vous avez déjà installé zsh

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh
hasanain
la source
2
Je ne pense pas qu'il était juste de voter contre cette réponse. Props car c'est le seul qui mentionne /etc/shellsdans le corps de la réponse elle-même.
heymatthew
1
@heymatthew la raison pour laquelle il est déclassé est qu'il n'a pas répondu à la question posée. Il a répondu à une question complètement différente sans rapport.
Tabitha
17

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

Accédez aux préférences Comptes, déverrouillez et cliquez avec le bouton droit sur votre compte d'utilisateur pour la boîte de dialogue Paramètres avancés . Votre shell doit être / bin / zsh, et vous pouvez modifier cette invocation de manière appropriée (c'est-à-dire ajouter l'argument --login).

Brian Agnew
la source
Malheureusement, cela ne fonctionne pas: je peux définir le shell que je préfère en utilisant chsh (tant que ce shell est répertorié dans / etc / shells), mais on ne peut pas ajouter d'arguments de ligne de commande au shell dans la boîte de dialogue des préférences avancées (iTerm échoue pour démarrer le shell).
Ivan Tarasov
Une partie de la syntaxe a changé dans OS X mais l'essentiel est de définir votre shell par défaut sur / bin / zsh comme Brian l'indique ci
EngineerDave
7
J'aime tellement. J'ai utilisé cette réponse tout à l'heure, et ce n'est qu'alors que j'ai réalisé que je l'avais écrite il y a près de 4 ans!
Brian Agnew
-2

Utilisez l' loginutilitaire pour créer un shell de connexion. Supposons que l'utilisateur auquel vous souhaitez vous connecter possède le nom d'utilisateur Alice et que zsh est installé /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 souhaitez configurer et entrez dans Commande :

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

Voir man loginpour plus de détails sur les options.

Robin Klose
la source
Ce n'est pas à 100% une réponse. Oui changera le shell que vous lancez par défaut, mais ce n'est pas une réponse sur la façon de créer une instance "login" d'un shell, c'est-à-dire de ressources toutes les variables à partir de zéro.
Tabitha