Tworzenie dowiązania symbolicznego w / bin nie działa

8

Wypróbowałem trzy różne sposoby, aby utworzyć symboliczny link do Sublime Text na moim komputerze Mac, a po każdym ponownym uruchomieniu terminalu wciąż informuje mnie, że polecenie nie zostało znalezione. Używam komputera Mac z Yosemite (OSX Yosemite, 10.10). Jak mogę utworzyć dowiązanie symboliczne, aby móc otworzyć Sublime za pomocą subpolecenia?

Jeden

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

Dwa

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

Trzy (bez cytatów)

ln -s Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub
Michał
źródło
czy link faktycznie tworzy coś w / bin o nazwie sub? spróbować sudo?
Chris
1
Jeśli używasz cudzysłowów, nie chcesz odwrotnego ukośnika. Jeśli nie używasz cudzysłowów, odwrotny ukośnik jest konieczny. Potrzebujesz również początkowego ukośnika /Applications/…, jak wskazano w odpowiedzi, i potrzebujesz uprawnień roota, aby pisać /bin(stąd sudo). Pozostaje pytanie, czy wystarczy uruchomić plik wykonywalny w ten sposób. Czy na pewno nie chcesz, aby skrypt powłoki działał podobnie open "/Applications/Sublime\ Text.app"do zawartości pliku /bin?
Jonathan Leffler,

Odpowiedzi:

16

Teraz brakuje „/” na początku swojej aplikacji i sudojak /binjest własnością rooti nie można właściwie napisać do niego jako zwykły użytkownik. W obecnej formie działałoby to tylko wtedy, gdy bieżącym katalogiem był systemowy katalog główny. Zakłada się oczywiście, że aplikacja Sublime Text znajduje się w głównym folderze aplikacji.

Spróbuj tego…

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

Jedno przemyślenie: zmiana zawartości jest uważana za złą praktykę, /bina /usr/binponieważ każda nadchodząca aktualizacja OS X może wyczyścić zawartość. /usr/local/binjest zwykłym miejscem do instalowania plików binarnych podanych przez użytkownika, więc

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

może być lepszą opcją.

Lub (ponieważ prawdopodobnie nigdy nie musisz uruchamiać Sublime Text z poziomu skryptu powłoki), po prostu zdefiniuj alias bash

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

które powinny zostać dodane do pliku startowego bash, aby się trzymał

echo "alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" >> ~/.bashrc
mockman
źródło
3
Musisz użyć, sudoa jeśli chcesz podać nazwę ścieżki, nie używaj ukośników odwrotnych do spacji!
user3439894
Nie zapomnij o pojedynczych cudzysłowach wokół ścieżki: alias subl = '/ Applications / Sublime \ Text.app/Contents/SharedSupport/bin/subl' Lepiej też umieść to w ~ / .bash_profile
drct
1

Późno na imprezę. Napotkałem ten sam problem podczas konfigurowania komputera Mac i wypróbowałem kilka rzeczy. Oto, co zadziałało dla mnie.

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

Aby uzyskać więcej informacji, przejdź do tego repozytorium github .

LT
źródło
Oprócz faktu, że twoje polecenie się nie powiedzie, ponieważ nie sudoużyłeś i jest wymagane w tym przypadku, jak to się różni od tego, co zostało już zaoferowane w odpowiedzi mockmana? Poza tym faktem, że decyduje się na użycie subkontra subl, aby wielokrotnie wpisywać jedną postać mniej, aby go użyć, tak naprawdę nie wynika to z tego, co widzę!
user3439894,
@ user3439894 sudo nie jest wymagany. ORAZ powyższe polecenie /usr/local/binnie używa /usr/binjako powyższych poleceń. /usr/local/binjest katalogiem zalecanym dla aplikacji użytkownika, podczas gdy / usr / bin jest używany w programach użytkowników zarządzanych przez dystrybucję. Tak więc subvs niesubl jest jedyną zmianą, po prostu zależy od preferencji użytkownika; co chcą napisać. Przepraszam jeśli to powoduje zamieszanie ..
LT
1. Uruchomienie polecenia z konta administratora zwraca ln: /usr/local/bin/subl: Permission denied2. Sugeruję ponowne przeczytanie odpowiedzi mockmana, tak jak absolutnie ma to miejsce /usr/local/bin/w drugim sudo ln -spoleceniu w jego odpowiedzi!
user3439894,