Ejecute el script en el mensaje de mac "Permiso denegado"

83

Soy nuevo en Mac y no estoy familiarizado con el comando de terminal, puse el dvtcolorconvert.rbarchivo en el directorio raíz de mi volumen, este script ruby ​​puede convertir temas de xcode 3 en formato de temas de xcode 4, que es xxxxxxxx.dvtcolorthemeformato.

Luego, ejecute el script /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolorthemeen la terminal, pero siempre aparecerá el mensaje " Permiso denegado ".

¿Qué pasa con esto? ¿Alguien puede ayudarme a solucionar este problema? Gracias.

Andy_24
fuente

Respuestas:

72

Lea la respuesta completa antes de intentar ejecutar con sudo

Intenta correr sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

El comando sudo ejecuta los comandos que le siguen con privilegios de 'superusuario' o 'root'. Esto debería permitirle ejecutar casi cualquier cosa desde la línea de comandos. Dicho esto, ¡NO HAGA ESTO! Si está ejecutando un script en su computadora y no lo necesita para acceder a los componentes centrales de su sistema operativo (supongo que no es así, ya que está invocando el script en algo dentro de su directorio de inicio (~ /)), entonces debería estar ejecutándose desde su directorio de inicio, es decir:

~/dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

Muévalo a ~ / o un subdirectorio y ejecútelo desde allí. Nunca debería tener problemas de permisos allí y no habrá riesgo de que acceda o modifique algo crítico para su sistema operativo.

Si aún tiene problemas, puede verificar los permisos en el archivo ejecutándolo ls -len el mismo directorio que el script ruby. Obtendrá algo como esto:

$ ls -l  
total 13  
drwxr-xr-x    4 or019268 Administ    12288 Apr 10 18:14 TestWizard  
drwxr-xr-x    4 or019268 Administ     4096 Aug 27 12:41 Wizard.Controls  
drwxr-xr-x    5 or019268 Administ     8192 Sep  5 00:03 Wizard.UI  
-rw-r--r--    1 or019268 Administ     1375 Sep  5 00:03 readme.txt

Notará que el archivo readme.txt dice -rw-r--r--a la izquierda. Esto muestra los permisos para ese archivo. Los 9 caracteres de la derecha se pueden dividir en grupos de 3 caracteres de 'rwx' (leer, escribir, ejecutar). Si quiero agregar derechos de ejecución a este archivo, lo ejecutaría chmod 755 readme.txty esa parte de permisos se convertiría en rwxr-xr-x. Ahora puedo ejecutar este archivo si quiero ejecutando ./readme.txt(./ le dice a bash que busque en el directorio actual el comando deseado en lugar de buscar la variable $ PATH).

schluchc alude a mirar la página de manual de chmod, haga esto ejecutando man chmod. Esta es la mejor manera de obtener documentación sobre un comando dado,man <command>

sean_m
fuente
¡Gracias! Pero, ¿dónde está el directorio de inicio (~ /)? ¿Significa escritorio?
Andy_24
El caparazón puede decirte eso con echo ~, típicamente /Users/$USER. El escritorio es solo un directorio debajo de eso. Las GUI de Unix ocultan el directorio de inicio de la vista, pero todavía está allí.
Henk Langeveld
1
Puede obtener la ruta a su directorio de inicio ejecutando echo $HOME. Es probable que se vea como / Users / <username> o posiblemente / Users / <iTunes username>
sean_m
@sean_m Gracias por tu explicación detallada, ya lo sé.
Andy_24
Gracias por la respuesta increíble
Faris Rayhan
243

¿Te diste los derechos para ejecutar el guión?

El siguiente comando como superusuario hará esto por usted:

sudo chmod 755 'filename'

Para obtener más detalles, debe leer la página de manual de chmod.

Schluchc
fuente
4
Esta debería ser la respuesta aceptada. Claro, conciso y simplemente funciona.
dialex
3
Usé: sudo chmod 777 'nombre de archivo'
Hemant Kaushik
@HemantKaushik seguro, ambos funcionan, pero ¿sabes la diferencia?
hally9k
2
@ hally9k 777 permite que todos modifiquen su archivo. Con 755, solo usted y el usuario root pueden modificar el archivo, lo que lo mantiene más seguro.
Steve Breese
4

En mi caso, había cometido un error tipográfico estúpido en el shebang.

Entonces, en caso de que alguien más con dedos gordos se encuentre con esta pregunta:

¡Ups! #!/usr/local/bin ruby

Quise escribir: #!/usr/bin/env ruby

El vago error que da ZSH me envió por el camino equivocado:

ZSH: zsh: permission denied: ./foo.rb

Intento: bash: ./foo.rb: /usr/local/bin: bad interpreter: Permission denied

jbbuckley
fuente
3

Debe ejecutar el script como 'superusuario', simplemente agregue 'sudo' delante del comando y escriba su contraseña cuando se le solicite.

Así que intenta:

sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

Si esto no funciona, intente adaptar los permisos:

sudo chmod 755 /dvtcolorconvert.rb
sudo chmod 755 ~/Themes/ObsidianCode.xccolortheme
Jens
fuente
2
Oooh, no necesariamente algo que sugeriría a menos que seas maldito seguro de que el guión no puede hacer daño a nada.
paxdiablo
3

Para ejecutar en modo administrador en mac

sudo su
Vaishnavi Bala
fuente
1

Verifique los permisos en su script Ruby (puede que no tenga permiso de ejecución), su archivo y directorio de tema (en caso de que no pueda leer el tema o intente crear otros temas allí), y el directorio en el que se encuentra cuando ejecuta el script (en caso de que haga archivos temporales en el directorio actual en lugar de entonces /tmp).

Cualquiera de ellos podría causarle dolor.

paxdiablo
fuente