Crear un enlace simbólico en / bin no funciona

8

He intentado tres formas diferentes de crear un enlace simbólico a Sublime Text en mi Mac y, después de reiniciar el terminal cada vez, sigue diciéndome que no se encuentra el comando. Estoy usando una Mac con Yosemite (OSX Yosemite, 10.10). ¿Cómo puedo crear un enlace simbólico para poder abrir Sublime con el subcomando?

Uno

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

Dos

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

Tres (sin comillas)

ln -s Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub
Miguel
fuente
¿El enlace realmente crea algo en / bin llamado sub? prueba sudo?
Chris
1
Si usa comillas, no quiere la barra invertida. Si no usa comillas, la barra invertida es necesaria. También necesita la barra diagonal /Applications/…, como se señala en la respuesta, y necesita privilegios de root para escribir /bin(por lo tanto sudo). La pregunta residual es si es suficiente ejecutar el ejecutable de esa manera. ¿Estás seguro de que no quieres un script de shell que haga algo así open "/Applications/Sublime\ Text.app"como el contenido del archivo /bin?
Jonathan Leffler

Respuestas:

16

Te estás perdiendo el '/' al comienzo de tu aplicación y, sudocomo /bines de su propiedad, rootno puedes escribirle como un usuario normal. Como lo tiene actualmente, solo funcionaría si su directorio actual fuera la raíz del sistema. Esto supone, por supuesto, que la aplicación Sublime Text está en su carpeta principal de Aplicaciones.

Prueba esto…

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

Una idea de último momento: se considera una mala práctica cambiar el contenido de /biny /usr/binporque cualquier próxima actualización de OS X puede borrar el contenido allí. /usr/local/bines el lugar habitual para instalar binarios proporcionados por el usuario, por lo que

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

podría ser la mejor opción

O (como probablemente nunca necesite ejecutar Sublime Text desde un script de shell), simplemente defina un alias bash

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

que debe agregarse a su archivo de inicio de bash para que se pegue

echo "alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" >> ~/.bashrc
imitador
fuente
3
¡Debe usar sudoy si va a citar el nombre de la ruta, no use barras invertidas para escapar de los espacios!
user3439894
No olvide las comillas simples alrededor de la ruta: alias subl = '/ Applications / Sublime \ Text.app/Contents/SharedSupport/bin/subl' También es mejor poner eso en ~ / .bash_profile
drct
1

Tarde a la fiesta. Encontré el mismo problema al configurar mi Mac e intenté algunas cosas. Esto es lo que funcionó para mí.

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

Para obtener más información, vaya a este repositorio de github .

LT
fuente
Además del hecho de que su comando fallará, ya que no lo usó sudoy es obligatorio en este caso, ¿en qué se diferencia esto de lo que ya se ofrece en la respuesta de mockman? Aparte de ese hecho de que él eligió usar subvs. subl, para escribir un personaje menos repetidamente para usarlo, ¡no es por lo que puedo ver!
user3439894
@ user3439894 sudo no es un requisito. Y el comando anterior /usr/local/binno se usa /usr/bincomo los comandos anteriores. /usr/local/bines el directorio recomendado para aplicaciones de usuario, mientras que / usr / bin se usa para programas de usuario administrados por distribución. Entonces, subvs nosubl es el único cambio, simplemente depende de la preferencia del usuario; lo que quieren escribir Pido disculpas si causa confusión ..
LT
1. El funcionamiento de su comando como es de una cuenta de administrador, devuelve ln: /usr/local/bin/subl: Permission denied2. Te sugiero que vuelva a leer la respuesta mockman "s, ya que no tiene absolutamente /usr/local/bin/en el segundo sudo ln -sorden en su respuesta!
user3439894