Environnement: OSX Sierra, Darwin Kernel Version 16.3.0
Problème racine: je veux utiliser un tas de scripts shell dans un référentiel central, qui ont un #! / Usr / bin / zsh. Sur mon Mac, le zsh est dans / bin / zsh.
Solution tentée: je veux créer un lien symbolique
ln -s /bin/zsh /usr/bin/zsh
Mon compte d'utilisateur dispose de droits d'administrateur, mais je ne suis pas root et je préférerais ne pas activer l'utilisateur root sur ce Mac. J'ai donc d'abord fait
sudo su
pour obtenir un shell avec les privilèges root, puis exécuté la commande ln . Cependant, je reçois toujours le message d'erreur ln: / usr / bin / zsh: opération non autorisée .
Des questions:
Pourquoi ai-je ce message d'erreur?
Que dois-je faire pour créer le lien?
Existe-t-il une meilleure façon d'atteindre mon objectif initial? Notez que la correction du #! lignes n'est pas une option.
/usr/bin/zsh
vers/bin/zsh
?Réponses:
Vous obtenez ce message en raison de la protection de l'intégrité du système d'Apple . La protection de l'intégrité du système comprend la protection de ces parties du système:
Chemins et applications que les applications et les installateurs tiers peuvent continuer à écrire pour inclure:
Cela signifie que vous pouvez simplement créer un lien symbolique dans
/usr/local/bin
(il est toujours dans votre $ PATH).MAIS, il semble que vous ayez spécifiquement besoin de créer le lien symbolique dans
/usr/bin
. Vous pouvez y parvenir en désactivant la protection de l'intégrité du système (veuillez ne pas le faire, modifiez simplement les scripts ..). Vous pouvez le désactiver par (je ne l'ai pas testé moi-même !!!):la source
#!/usr/bin/zh
comme shell, donc la solution qu'il cherche est de lier cet emplacement à l'endroit où réside réellement le shell, mais comme vous le dites, il est protégé contre cela. À moins que la protection ne soit contournée, la seule solution semble être une modification par lots des scripts.