2010-06-27 7 views
10

Tengo el siguiente scriptlínea tinglado no trabajar en escritura R

#!/usr/bin/Rscript 

print ("shebang works") 

en un archivo llamado shebang.r. Cuando lo ejecuto desde la línea de comandos usando RSCRIPT funciona

$ Rscript shebang.r 

pero cuando lo ejecuto desde la línea de comandos solo

$ shebang.r 

no funciona. comando shebang.r no encontrado.

Si escribo (basado en otros ejemplos que he visto)

$ ./shebang.r 

consigo permiso denegado.

Sí, RSCRIPT se encuentra en el directorio/usr/bin

Respuesta

12

hacerlo ejecutable.

chmod 755 shebang.r 
+0

¡Funcionó! ¿Hay otras opciones además de 755 que funcionan? Estoy planeando sharpie el comando en mi computadora portátil. Gracias. – Milktrader

+0

@Milktrader: lo que es necesario es que la persona que intenta ejecutar el archivo tenga permiso de ejecución en él. Lea la página man para 'chown' y la sección de la página man' ls' en el "Formato largo" (es decir, 'ls -l'). – dmckee

+0

Cualquier cosa que establezca el bit ejecutable para el propietario debería funcionar, siempre que sea el propietario del archivo. Como mínimo, necesita '100', pero ya no podrá leerlo ni escribirlo. Probablemente desee al menos '700', que le da al propietario permisos de lectura, escritura y ejecución, pero niega todos los permisos a todos los demás (excepto a la raíz). – Thomas

2

Además de la respuesta de Sjoerd ... Sólo los directorios listados en la variable de entorno PATH son inspeccionados para los comandos a ejecutar. Debe escribir ./shebang.r (en lugar de solo shebang.r) si el directorio actual, conocido como ., no está en su PATH.

Para inspeccionar PATH, tipo

echo $PATH 

Para añadir . a PATH, tipo

export PATH="$PATH:." 

Puede añadir esta línea a su ~/.bashrc para que esto ocurra de forma automática si se abre un nuevo shell.

+0

sí, necesito usar ./shebang.r para que funcione. Me dijeron que añadiendo. La variable PATH introduce riesgos de seguridad, pero podría hacerlo de todos modos ya que es mi computadora personal y no es como si tuviera códigos de lanzamiento de misiles. – Milktrader

+2

El riesgo de seguridad es que podría estar en un directorio donde otra persona ponga, digamos, un programa llamado 'ls' que podría ejecutar accidentalmente. Si '.' es el último en su' PATH', el riesgo es bastante pequeño, porque el '/ bin/ls' habitual tendrá prioridad, y' .' solo se buscará en el caso de un comando inexistente. Aún así, recomendaría no agregar '.' al' PATH' del usuario raíz, ya que el daño potencial es mayor. Ver más https://listman.redhat.com/archives/redhat-list/1999-July/msg01969.html – Thomas