2010-06-27 12 views
10

Ho il seguente scriptshebang non funziona in R sceneggiatura

#!/usr/bin/Rscript 

print ("shebang works") 

in un file chiamato shebang.r. Quando l'eseguo da linea di comando usando rscript funziona

$ Rscript shebang.r 

ma quando l'eseguo da linea di comando da solo

$ shebang.r 

non funziona. comando shebang.r non trovato.

Se scriv (basata su altri esempi che ho visto)

$ ./shebang.r 

ottengo il permesso negato.

Sì, rscript si trova nella directory/usr/bin

risposta

12

rendere il file eseguibile.

chmod 755 shebang.r 
+0

Ha funzionato! Ci sono altre opzioni oltre a 755 che funzionano? Sto progettando di affilare il comando sul mio laptop. Grazie. – Milktrader

+0

@Milktrader: è necessario che la persona che tenta di eseguire il file abbia il permesso di eseguire su di esso. Leggi la pagina man di 'chown' e la sezione della pagina man di' ls' sul "Long format" (ad esempio 'ls -l'). – dmckee

+0

Qualsiasi cosa che imposta il bit eseguibile per il proprietario dovrebbe funzionare, purché tu sia il proprietario del file. In minima parte, hai bisogno di '100', ma non sarai più in grado di leggerlo o scriverlo. Probabilmente vuoi almeno '700', che dà al proprietario le autorizzazioni di lettura, scrittura ed esecuzione, ma nega tutte le autorizzazioni a tutti gli altri (tranne root). – Thomas

2

Oltre alla risposta di Sjoerd ... Solo le directory elencate nella variabile d'ambiente PATH sono ispezionati per comandi da eseguire. È necessario digitare ./shebang.r (al contrario di solo shebang.r) se la directory corrente, nota come ., non è nello PATH.

per ispezionare PATH, tipo

echo $PATH 

Per aggiungere .-PATH, tipo

export PATH="$PATH:." 

È possibile aggiungere questa riga al vostro ~/.bashrc per farlo accadere automaticamente se si apre una nuova shell.

+0

sì, ho bisogno di usare ./shebang.r per farlo funzionare. Mi è stato detto che aggiungendo. alla variabile PATH introduce il rischio per la sicurezza, ma potrei farlo comunque poiché è il mio personal computer e non è come se avessi dei codici di lancio missilistici su di esso. – Milktrader

+2

Il rischio per la sicurezza è che potresti trovarti in una directory in cui qualcun altro inserisce, ad esempio, un programma denominato 'ls' che potresti eseguire accidentalmente. Se '.' è l'ultimo nel' PATH', il rischio è piuttosto piccolo, perché il solito '/ bin/ls 'avrà la precedenza, e' .' sarà cercato solo nel caso di un comando inesistente. Tuttavia, mi raccomando di non aggiungere '.' al' PATH' dell'utente root, perché il danno potenziale è maggiore. Vedi oltre https://listman.redhat.com/archives/redhat-list/1999-July/msg01969.html – Thomas