Autorizzazione script Bash negata e interprete errato


8

Sono su un kali linux a 64 bit.

Ho creato uno script Python che richiede 2 argomenti per iniziare. Non voglio scrivere ogni volta gli stessi identici percorsi o cercare nella cronologia dei comandi che ho usato nel terminale. Così ho deciso di creare un semplice script che chiama lo script Python con i suoi argomenti.

#! /bin bash

python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/

È esattamente lo stesso comando che userei nel terminale. Tuttavia, viene visualizzato un messaggio di errore quando provo a eseguire il file di script.

bash: ./wtf.sh: /bin: bad interpreter: Permission denied

wtf.sh ha diritti eseguibili.

Che c'è?

Risposte:


10

Qui hai uno spazio anziché una barra:

#! /bin bash

Dovrebbe essere:

#! /bin/bash

o semplicemente

#!/bin/bash

(il primo spazio è facoltativo). Lo shebang ( #!) dovrebbe essere seguito dal percorso di un eseguibile , che può essere seguito da un argomento , ad es.

#!/usr/bin/env sh

In questo caso /usr/bin/envè l'eseguibile; vedere man envper i dettagli.

Si /binriferisce solo a una directory.


accidenti, sciocco me! Grazie! Non l'ho visto ...
Davlog,

1
Potresti voler prendere l'abitudine di usare #!/bin/sh(invece di #!/bin/bash) a meno che tu non sappia che stai usando bashfunzionalità.
G-Man dice "Ripristina Monica" l'

@ G-Man Grazie per aver ripulito un po '. WRT bash vs. sh, stavo solo seguendo lo schema della domanda (anche se la mia tendenza è quella di usare solo shquando so che non sto usando le funzionalità bash).
Riccioli d'oro,

Nel terminale Ubuntu, which bashè utile. Questo ritorna /bin/bash. Nella parte superiore del mio script Bash aggiungo #!/bin/bash. Quindi, quando voglio eseguire lo script Bash, entro bash foo.sh. Quindi which shviene utilizzato allo stesso modo. sh foo.sh
Noobninja,

1
@G-Man, nel mondo di tutti i giorni ci sono un numero sfortunato di persone che non sanno se stanno usando le funzionalità di Bash o meno. In molti casi è preferibile non avere affatto uno script (perché Bash è specificato nello shebang ma è mancante) piuttosto che eseguire e fare qualcosa di inaspettato (perché /bin/shè qualcosa di diverso da Bash e ci sono Bashism inosservati nello script). Vedere qui.
Wildcard il

1

Vale la pena notare che se il mountpoint su cui risiede lo script ha l'attributo 'noexec', allora puoi prendere tutto ciò che vuoi e ancora non funzionerà, ma invocando l'interprete con lo script come un argomento funzionerà (purché che a sua volta non tenta di eseguire un altro script su un mount noexec).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.