Aujourd'hui, j'étais en train d'essayer de désinstaller macports quand j'ai remarqué qu'une erreur apparaissait à chaque fois que j'utilisais sudo. J'ai tué Terminal et essayé de le redémarrer, ce qui a échoué avec le message d'erreur "Vous n'êtes pas autorisé à exécuter cette application" et "L'administrateur a défini votre shell sur une valeur illégale". Comment puis-je résoudre ce problème ?
Réponses
Trop de publicités?J'avais déjà résolu le problème en utilisant l'Utilitaire de disque pour réparer les permissions
Si la réparation des permissions résout le problème, la cause est (presque certainement) que les permissions de /etc/shells
étaient incorrects, empêchant le terminal de le lire.
/etc/shells
contient une liste de programmes shell valides, et Terminal vérifie si le shell de votre compte d'utilisateur est répertorié. Si ce n'est pas le cas, il produit le message "shell illégal". S'il ne peut pas lire le fichier /etc/shells
en raison de problèmes d'autorisation, il produit également ce message.
Plus rarement, certaines personnes ont rencontré ce problème lorsque la /etc/shells
a été altéré d'une manière ou d'une autre de sorte qu'il est vide, auquel cas vous devrez restaurer son contenu en le copiant depuis un bon système, ou avec une restauration Time Machine, etc.
Pour répondre à votre question initiale :
Si Terminal se plaint d'un "shell illégal", cela signifie que le shell de votre compte d'utilisateur n'a pas été trouvé dans le répertoire /etc/shells
.
Vous pouvez voir quels shells sont considérés comme valides avec cat /etc/shells
.
Vous pouvez vérifier quel shell votre compte utilisateur est configuré pour utiliser avec echo $SHELL
ou en lisant les informations sur l'utilisateur avec dscl . -read "/Users/$LOGNAME" UserShell
. Ou vous pouvez utiliser Préférences du système :
- Ouvrir Préférences du système et aller à Utilisateurs et groupes .
- Cliquez sur le cadenas et saisissez votre mot de passe pour pouvoir lire/régler les paramètres utilisateur.
- Control-Click (ou Right-Click) sur votre utilisateur pour obtenir un menu contextuel et choisir Options avancées .
La feuille Options avancées affiche des informations détaillées sur le compte de l'utilisateur, y compris le nom du chemin du shell. Vous pouvez également l'utiliser pour modifier le nom de chemin de l'interpréteur de commandes afin de réactiver les connexions s'il a été défini sur une valeur qui ne figure pas dans la liste des options avancées. /etc/shells
.
Si vous obtenez des messages d'erreur étranges dans vos fenêtres de terminal lors de leur première ouverture, cela indique probablement un problème avec les préférences de votre terminal. Essayez de supprimer (ou simplement de renommer) le fichier des préférences du terminal ( ~/Library/Preferences/com.apple.Terminal.plist
) et ensuite redémarrer l'application Terminal. (Source)
Si le problème persiste, regardez ce que vous avez dans vos fichiers dot shell : ~/.bash_profile
, ~/.bashrc
et autres. Si vous ne trouvez pas l'origine du problème, essayez de supprimer (ou simplement de renommer) ces dotfiles.
Un autre endroit où chercher les problèmes est le default.term
fichier sous ~/Library/Application Support/Terminal
. Il s'agit du fichier qui stocke les paramètres par défaut de Terminal Windows.
Si tout cela échoue, utilisez l'utilitaire de disque pour réparer les permissions du terminal. (Source)
J'ai eu la même erreur après avoir lancé chsh
et fait une faute de frappe dans le chemin pour le shell de connexion.
Je n'ai pas pu ouvrir Terminal, et rien ne s'est produit lorsque j'ai essayé d'afficher la feuille d'options avancées dans le panneau de préférences Utilisateurs et groupes. J'ai pu exécuter chsh -s /bin/bash
sur iTerm 2 cependant.
Vous pouvez également changer le shell de connexion par défaut avec dscl ou modifier /var/db/dslocal/nodes/Default/users/$USER.plist
directement.
Pour ma part, j'ai reçu cette erreur à cause d'une faute de frappe de chsh également. J'utilise homebrew et (très bêtement) j'ai configuré mon shell sur le binaire dans /usr/local/Cellar plutôt que sur le lien dynamique dans /usr/local/bin. Le résultat est que le terminal a été bloqué mais, étonnamment, iTerm ne l'a pas fait. Ce fil de discussion a été très utile pour résoudre mon problème.
Pour éviter mon problème : si vous utilisez homebrew, référencez TOUJOURS les binaires liés dynamiquement dans /usr/local/bin, car ceux-ci seront toujours maintenus à jour.