Come eseguo uno script bash nel terminale?


108

Ho uno script bash come:

#!/bin/bash

echo Hello world!

Come lo eseguo in Terminal?


27
Ha i permessi di esecuzione? Prova un chmod +x scriptnamee poi ./scriptname.
Direttamente

Risposte:


49

$prompt: /path/to/scripte premi invio. Nota che devi assicurarti che lo script abbia i permessi di esecuzione.


1
Se sei già nella /path/to directory, ad esempio con il cd /path/tocomando, puoi entrare ./scriptper eseguire il tuo script. Non dimenticare, in questo caso il './' prima di 'script'
FrViPofm


26

cd nella directory che contiene lo script o inseriscilo in una cartella bin che si trova in $ PATH

quindi digita

./scriptname.sh

se nella stessa directory o

scriptname.sh

se è nella cartella bin.


9
Funzionerà solo se lo script ha il bit di esecuzione impostato. Probabilmente è necessario affrontarlo.
Bryan Oakley

./scriptname.shfunziona per me ma scriptname.shscriptname.sh: command not found. -rwxr-xr-xsono i suoi permessi.
Spikatrix

1
Il consiglio a cdovunque perpetra un altro comune malinteso da principiante. A meno che lo script internamente non abbia dipendenze che richiedono che venga eseguito in una directory particolare (come la necessità di leggere un file di dati a cui lo script inspiegabilmente non fornisce un'opzione a cui puntare) non dovresti mai aver bisogno di un cdposto per eseguirlo, e molto spesso non vorrà.
tripla

24

Potresti fare:
sh scriptname.sh


6
Downvote: è sbagliato se è correttamente uno script Bash.
tripleee

1
Voto positivo: va bene su Mac OS X se il tuo script bash si trova nella stessa directory
Karl Taylor

30
@kot "Per me funziona" è molto lontano da "questa è una risposta corretta". Esso può funzionare se shè un link simbolico a bash, o se lo script non utilizza alcun Bash specifico costrutto. Nel primo caso, usare bashinvece di shè l'unica soluzione portabile corretta; in quest'ultimo caso, non è la risposta corretta a questa particolare domanda, perché l'OP ha chiesto specificamente consigli per uno script Bash. Eseguire la risposta sbagliata è irresponsabile; gli utenti che non riescono a cogliere la differenza spesso pubblicano qui e hanno bisogno di essere mostrato perché questa risposta "ha funzionato per me" non ha funzionato per loro.
tripleee

@kraftydevil troppo ^ Uno dei tanti obiettivi duplicati popolari su questo argomento: stackoverflow.com/questions/5725296/...
tripleee

5
@kot ripeto: ci sono situazioni in cui funziona (proprio come hai scoperto tu) ma non è una risposta corretta nel caso generale alla domanda nel titolo. Per lo meno, questa risposta dovrebbe spiegare le condizioni in cui funziona; ma il mio suggerimento sarebbe semplicemente eliminare questa risposta.
tripleee

14

Per prima cosa devi renderlo eseguibile usando: chmod +x name_of_your_file_script .

Dopo averlo reso eseguibile, puoi eseguirlo usando ./same_name_of_your_file_script


10

Modificare la directory in cui si trova lo script utilizzando il comando cd

Quindi digita

bash program-name.sh

6
Non è necessario andare da cdnessuna parte; è possibile specificare un percorso arbitrariamente complesso come argomento per bash; in effetti, qualsiasi programma che accetta l'argomento di un nome di file funziona in questo modo (o è terribilmente, incredibilmente rotto).
tripleee

10

Questo è un vecchio thread, ma mi sono imbattuto e sono sorpreso che nessuno abbia ancora fornito una risposta completa. Quindi ecco qua ...

Il tutorial sull'esecuzione di uno script da riga di comando!

D: Come lo eseguo in Terminal?

Confusioni e conflitti:

  • Non hai bisogno di un'estensione (come .sh o .py o qualsiasi altra cosa), ma aiuta a tenere traccia delle cose. Non farà male. Se il nome dello script contiene un'estensione, tuttavia, è necessario utilizzarlo.
  • Non è necessario essere in una determinata directory per nessun motivo.
  • Non è necessario digitare il nome del programma che esegue il file (BASH o Python o altro) a meno che non lo si desideri. Non farà male.
  • Non è necessario sudofare nulla di tutto ciò. Questo comando è riservato per l'esecuzione di comandi come un altro utente o un utente "root" (amministratore). Ottimo post qui .

(Una persona che sta solo imparando come eseguire gli script non dovrebbe usare questo comando a meno che non ci sia una reale necessità, come installare un nuovo programma. Un buon posto dove mettere i tuoi script è nella tua cartella ~ / bin. Puoi arrivarci da digitando cd ~/bino cd $HOME/bindal prompt del terminale. Avrai i permessi completi in quella cartella.)

Per "eseguire questo script" dal terminale su un sistema di tipo Unix / Linux, devi fare tre cose:

  1. Indica al sistema la posizione dello script. (sceglierne uno)

    • Digita il percorso completo con il nome dello script (ad esempio /path/to/script.sh). Puoi verificare il percorso completo digitando pwdoecho $PWD nel terminale.
    • Esegui dalla stessa directory e usa ./per il percorso (ad esempio ./script.sh). Facile.
    • Posiziona lo script in una directory che si trova sul sistema PATHe digita semplicemente il nome (ad esempio script.sh). Puoi verificare il sistema PATHdigitando echo $PATHo echo -e ${PATH//:/\\n}se desideri un elenco più ordinato.
  2. Indica al sistema che lo script ha il permesso di essere eseguito. (sceglierne uno)

    • Impostare il "bit di esecuzione" digitando chmod +x /path/to/script.shnel terminale.
    • Puoi anche usare chmod 755 /path/to/script.shse preferisci i numeri. C'è una grande discussione con un bel grafico qui .
  3. Indica al sistema il tipo di script. (sceglierne uno)

    • Digita il nome del programma prima dello script. (es. BASH /path/to/script.sho PHP /path/to/script.php) Se lo script ha un'estensione, come .php o .py, fa parte del nome dello script e devi includerla.
    • Usa uno shebang , che vedo che hai ( #!/bin/bash) nel tuo esempio. Se lo hai come prima riga del tuo script, il sistema utilizzerà quel programma per eseguire lo script. Non è necessario digitare programmi o utilizzare estensioni.
    • Usa uno shebang "portatile" . È inoltre possibile fare in modo che il sistema scelga la versione del programma che si trova per prima in PATHutilizzando #!/usr/bin/envseguito dal nome del programma (ad esempio #!/usr/bin/env basho #!/usr/bin/env python3). Ci sono pro e contro come ampiamente discusso qui .

1
Riepilogo abbastanza buono. Forse nell'ultimo esempio ricorda alle persone che script.she script.phpsono i nomi di file letterali di questi script, e che se inserisci un'estensione nel nome del file, devi includerla quando esegui lo script (e viceversa; se lo script non lo fa ' t avere un'estensione, non metterne una). Questo è diverso, ad esempio, da DOS, dove si poteva omettere .bato .exedal nome del file, e i file dovevano avere un'estensione da un piccolo insieme per essere considerati eseguibili.
tripla

1
Un altro errore comune è principianti fraintendendo la differenza tra path, /path, ./path, e ~/path. Immagino che probabilmente non vogliate spiegarlo qui, ma forse collegarvi a una spiegazione come ... oh diavolo, ho dovuto postare questo.
tripleee

1

E ancora un altro modo

. /path/to/script

Qual è il significato del punto?


Questo esegue lo script nella shell corrente, che deve essere richiamato. Questo non è ciò che la maggior parte delle persone si aspetta che accada quando si esegue semplicemente uno script. Ciò può avere effetti collaterali sul tuo ambiente esistente.
Software Engineer,

-2

Se ti trovi in ​​una directory o in una cartella in cui è disponibile il file di script, modifica semplicemente l'autorizzazione del file in modalità eseguibile facendo

chmod +x your_filename.sh

Dopodiché eseguirai lo script utilizzando il seguente comando.

$ sudo ./your_filename.sh

Sopra il "." rappresentano la directory corrente. Nota! Se non ci si trova nella directory in cui è presente il file script bash, modificare la directory in cui si trova il file utilizzando

cd Directory_name/write the complete path

comando. Altrimenti il ​​tuo script non può essere eseguito.


Spero che tutti lo faranno perché menziono tutti i concetti correlati su questo particolare problema.
Hassan Shamshir

Come spiegato in altre risposte qui, sudoè sbagliato e potenzialmente orribilmente sbagliato se lo usi su uno script non attendibile che abusa dei poteri che gli hai dato inutilmente.
tripla

Il consiglio da cdqualche parte è difficile da capire, ma probabilmente anche sbagliato.
tripla
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.