Создание символической ссылки в / bin не работает

8

Я попробовал три разных способа создать символическую ссылку на Sublime Text на моем Mac, и после каждого перезапуска терминала он все равно продолжает сообщать мне, что команда не найдена. Я использую Mac с Yosemite (OSX Yosemite, 10.10). Как я могу создать символическую ссылку, чтобы я мог открыть Sublime с помощью subкоманды?

Один

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

Два

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

Три (без кавычек)

ln -s Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub
Майкл
источник
ссылка действительно создает что-то в / bin с именем sub? попробуй sudo?
Крис
1
Если вы используете кавычки, вы не хотите обратную косую черту. Если вы не используете кавычки, обратная косая черта необходима. Вы также должны использовать начальную косую черту /Applications/…, как указано в ответе, и вам нужны права суперпользователя для записи /bin(следовательно sudo). Остаточный вопрос заключается в том, достаточно ли запустить такой исполняемый файл. Вы уверены, что не хотите, чтобы сценарий оболочки выполнял что-то подобное open "/Applications/Sublime\ Text.app"вместо содержимого файла /bin?
Джонатан Леффлер

Ответы:

16

Вы упускаете «/» в начале вашего приложения и , sudoкак /binпринадлежит rootи вы не можете на самом деле писать к нему в качестве обычного пользователя. Как у вас сейчас, он будет работать только в том случае, если ваш текущий каталог был системным корнем. Это предполагает, конечно, что приложение Sublime Text находится в вашей основной папке приложений.

Попробуй это…

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

Одна запоздалая мысль: изменение содержимого считается плохой практикой, /binи /usr/binлюбое последующее обновление OS X может стереть содержимое. /usr/local/binэто обычное место для установки пользовательских бинарных файлов, поэтому

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

может быть лучшим вариантом.

Или (поскольку вам, вероятно, никогда не потребуется запускать Sublime Text из сценария оболочки), просто определите псевдоним bash.

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

который должен быть добавлен в ваш стартовый файл bash, чтобы он остался

echo "alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" >> ~/.bashrc
mockman
источник
3
Вам нужно использовать, sudoи если вы собираетесь заключать в кавычки путь, не используйте обратную косую черту для выхода из пробелов!
user3439894
Не забудьте заключить в путь одинарные кавычки: alias subl = '/ Applications / Sublime \ Text.app/Contents/SharedSupport/bin/subl' Также лучше поместить это в ~ / .bash_profile
drct
1

Поздно на вечеринку. Я столкнулся с той же проблемой при настройке моего Mac и попробовал несколько вещей. Вот что сработало для меня.

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

Для получения дополнительной информации, перейдите на этот репозиторий github .

LT
источник
Помимо того, что ваша команда потерпит неудачу, так как вы не использовали, sudoи в этом случае это требуется, чем это отличается от того, что уже было предложено в ответе mockman? Кроме того факта, что он решил использовать « subпротив» subl, чтобы несколько раз набирать символ меньше, чтобы использовать его, это действительно не из того, что я вижу!
user3439894
@ user3439894 sudo не является обязательным требованием. И команда выше использует /usr/local/binне /usr/binкак команды выше. /usr/local/binэто рекомендуемый каталог для пользовательских приложений, тогда как / usr / bin используется для управляемых распространением пользовательских программ. Так, subпротив sublэто не единственное изменение, это просто зависит от предпочтений пользователя; что они хотят написать. Я прошу прощения, если это вызывает замешательство ..
LT
1. Выполнение вашей команды как есть из учетной записи администратора возвращает ln: /usr/local/bin/subl: Permission denied2. Я бы посоветовал вам перечитать ответ mockman, как это было абсолютно /usr/local/bin/во второй sudo ln -sкоманде в его ответе
user3439894