Створення символьної посилання в / 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? спробувати судо?
chris

1
Якщо ви використовуєте котирування, ви не бажаєте зворотної косої риси. Якщо ви не використовуєте котирування, зворотний нахил необхідний. Вам також потрібна провідна косої риски /Applications/…, як зазначено у відповіді, і вам потрібні кореневі привілеї для запису /bin(звідси sudo). Залишковим питанням є, чи достатньо запустити такий виконуваний файл. Ви впевнені, що не хочете скрипту оболонки, який open "/Applications/Sublime\ Text.app"натомість робить щось на зразок вмісту файла /bin?
Джонатан Леффлер

Відповіді:


16

Вам не вистачає знака "/" на початку програми, sudoтому що /binвін належить, rootі ви фактично не можете писати на нього як звичайному користувачеві. Наразі він працює, лише якщо ваш теперішній каталог був системним коренем. Це, звичайно, передбачає, що додаток Sublime Text знаходиться у вашій головній папці Applications.

Спробуйте це…

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

3
Вам потрібно використовувати, sudoі якщо ви збираєтесь цитувати ім'я шляху, тоді не використовуйте зворотні косої риски, щоб уникнути пробілів!
користувач3439894

Не забудьте одинарні лапки навколо шляху: 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 .


Окрім того, що ваша команда зазнає невдачі, оскільки ви її не використовували, sudoі це вимагається в цьому випадку, чим це відрізняється від того, що вже було запропоновано у відповіді макмена? Крім того, той факт, що він вирішив використовувати subvs. subl, щоб набрати один символ менше разів, щоб його використовувати, це насправді не з того, що я бачу!
користувач3439894

@ user3439894 Судо не є вимогою. І команда вище використовує /usr/local/binне /usr/binяк команди вище. /usr/local/bin- це каталог рекомендованих програм для користувачів, тоді як / usr / bin використовується для програм, керованих дистрибуцією. Так, subпроти sublце НЕ єдина зміна, це просто залежить від уподобань користувача; що вони хочуть написати. Прошу вибачення, якщо це викликає плутанину ..
LT

1. Запускаючи свою команду як з облікового запису адміністратора, повертається ln: /usr/local/bin/subl: Permission denied2. Я б запропонував вам перечитати відповідь македоніста, як це абсолютно є /usr/local/bin/у другій sudo ln -sкоманді у його відповіді!
user3439894
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.