Sono su un kali linux a 64 bit.
Ho creato uno script python che richiede 2 argomenti per iniziare. Non voglio digitare ogni volta gli stessi identici percorsi o cercare nella cronologia dei comandi che ho usato nel terminale. Quindi 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, ricevo un messaggio di errore quando cerco di eseguire il file di script.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh ha diritti eseguibili.
Cosa cè che non va?
Risposta
Qui hai uno spazio invece di una barra:
#! /bin bash
Dovrebbe essere:
#! /bin/bash
o semplicemente
#!/bin/bash
(il primo spazio è opzionale). Lo shebang (#!
) deve 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
è leseguibile; vedi man env
per i dettagli.
Solo /bin
fa riferimento a una directory.
Commenti
Risposta
Vale la pena notare che se il punto di montaggio su cui risiede lo script ha lattributo “noexec”, allora puoi mostrare tutto quello che vuoi e comunque non funzionerà, ma invocare linterprete con lo script come argomento (purché che a sua volta non tenta di eseguire un altro script su un montaggio noexec).
#!/bin/sh
(invece di#!/bin/bash
) a meno che tu non sappia che stai utilizzando lebash
funzionalità.sh
solo quando so che ' non utilizzo le funzionalità di bash).which bash
è utile. Ciò restituisce/bin/bash
. Nella parte superiore del mio script Bash aggiungo#!/bin/bash
. Quindi, quando voglio eseguire lo script Bash, inseriscobash foo.sh
. Quindiwhich sh
viene utilizzato allo stesso modo.sh foo.sh
/bin/sh
è qualcosa di diverso da Bash e ci sono Bashismi inosservati nello script). Vedi qui.