La création d'un lien symbolique dans / bin ne fonctionne pas

8

J'ai essayé trois façons différentes de créer un lien symbolique vers Sublime Text sur mon Mac et, après avoir redémarré le terminal à chaque fois, il continue de me dire que la commande est introuvable. J'utilise un Mac avec Yosemite (OSX Yosemite, 10.10). Comment créer un lien symbolique pour ouvrir Sublime avec la subcommande?

Une

ln -s 'Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl' /bin/sub

Deux

ln -s "Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" /bin/sub

Trois (sans guillemets)

ln -s Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub
Michael
la source
le lien crée-t-il réellement quelque chose dans / bin appelé sub? essayez sudo?
chris
1
Si vous utilisez des guillemets, vous ne voulez pas la barre oblique inverse. Si vous n'utilisez pas de guillemets, la barre oblique inverse est nécessaire. Vous avez également besoin de la barre oblique principale /Applications/…, comme indiqué dans la réponse, et vous avez besoin des privilèges root pour écrire /bin(d'où sudo). La question résiduelle est de savoir s'il suffit d'exécuter l'exécutable comme ça. Êtes-vous sûr de ne pas vouloir un script shell qui fasse quelque chose comme à la open "/Applications/Sublime\ Text.app"place comme contenu du fichier /bin?
Jonathan Leffler

Réponses:

16

Vous manquez le «/» au début de votre application et sudocomme il /binappartient à rootet vous ne pouvez pas réellement y écrire en tant qu'utilisateur normal. Comme vous l'avez actuellement, cela ne fonctionnerait que si votre répertoire actuel était la racine du système. Cela suppose bien sûr que l'application Sublime Text se trouve dans votre dossier Applications principal.

Essaye ça…

sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub

Une réflexion après coup: il est considéré comme une mauvaise pratique de modifier le contenu de /binet /usr/binparce que toute mise à niveau d'OS X à venir peut effacer le contenu là-bas. /usr/local/binest l'endroit habituel pour installer les binaires fournis par l'utilisateur, donc

[[ -d /usr/local/bin ]] || sudo mkdir /usr/local/bin
sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/sub

pourrait être la meilleure option.

Ou (comme vous n'avez probablement jamais besoin d'exécuter Sublime Text à partir d'un script shell), définissez simplement un alias bash

alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl

qui devrait être ajouté à votre fichier de démarrage bash pour le faire coller

echo "alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" >> ~/.bashrc
mockman
la source
3
Vous devez utiliser sudoet si vous allez citer le chemin, n'utilisez pas de barres obliques inverses pour échapper aux espaces!
user3439894
N'oubliez pas les guillemets simples autour du chemin: alias subl = '/ Applications / Sublime \ Text.app/Contents/SharedSupport/bin/subl' Aussi mieux de mettre cela dans ~ / .bash_profile
drct
1

Tard à la fête. J'ai rencontré le même problème lors de la configuration de mon Mac et j'ai essayé plusieurs choses. Voici ce qui a fonctionné pour moi.

ln -sv "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

Pour plus d'informations, consultez ce dépôt github .

LT
la source
Mis à part le fait que votre commande échouera, puisque vous ne l'avez pas utilisée sudoet qu'elle est requise dans ce cas, en quoi est-ce différent de ce qui a déjà été proposé dans la réponse de mockman? Autre que le fait qu'il ait choisi d'utiliser subvs. subl, afin de taper un caractère de moins à plusieurs reprises pour l'utiliser, ce n'est vraiment pas d'après ce que je peux voir!
user3439894
@ user3439894 sudo n'est pas obligatoire. ET la commande ci-dessus n'utilise /usr/local/binpas /usr/binles commandes ci-dessus. /usr/local/binest le répertoire recommandé pour les applications utilisateur tandis que / usr / bin est utilisé pour les programmes utilisateur gérés par la distribution. Ainsi, subvs subln'est pas le seul changement, il dépend simplement des préférences de l'utilisateur; ce qu'ils veulent écrire. Je m'excuse si cela cause de la confusion ..
LT
1. L'exécution de votre commande telle qu'elle est à partir d'un compte administrateur renvoie ln: /usr/local/bin/subl: Permission denied2. Je vous suggère de relire la réponse de mockman comme elle l'a absolument fait /usr/local/bin/dans la deuxième sudo ln -scommande dans sa réponse!
user3439894