Differenza tra comandi nello script bash e comandi nel terminale


Risposte:


7

Il tuo terminale esegue una shell (molto probabilmente bash), che è quella che richiede i tuoi comandi e li esegue.

Oltre a questa modalità interattiva è anche possibile usare la shell per eseguire comandi da un file. Per eseguire i comandi nel tuo file puoi chiamare la shell direttamente come bash scripto puoi avviare il tuo file con un "shebang" #!/bin/bashe renderlo eseguibile ( chmod +x script). Quindi puoi trattare lo script come un binario ed eseguirlo per esempio come ./scripto metterlo in un punto dove la tua shell lo sta cercando. ( echo $PATH)

Molto probabilmente sia la shell interattiva sia la shell utilizzata per l'esecuzione sono bash. Dal punto di vista di un bash "first day learning linux" funziona esattamente lo stesso in entrambe le modalità. - Molto più tardi potresti incappare in lievi differenze. Se vuoi davvero conoscere in dettaglio suggerirei di leggere man bashe cercare luoghi che menzionano "interattivo". (È possibile cercare una pagina man, premendo /.)

Una cosa importante da notare è che lo script viene eseguito come un nuovo processo. Ciò significa in particolare che le variabili impostate nello script non sono visibili nella shell chiamante.

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

Senza l'esportazione anon è nemmeno visibile allo script interno.


1

In generale, la risposta sarebbe "no", i comandi nella shell sono gli stessi negli script, nella sintassi e nella semantica.

Ma ci sono un sacco di piccole sfumature relative alla configurazione dell'ambiente (quali variabili vengono utilizzate e a cosa sono impostate).

  • la shell interattiva di scelta per Linux è bash, ma scripting usa spesso altri interpreti ( shche è un predecessore di bash, kshche è alla pari con bash), quindi bisogna prendere in considerazione ciò shell utilizzato (il nome della shell corrente s viene tradizionalmente tenuto in una variabile SHELL, prova a digitare echo $SHELL).

  • potrebbero esserci differenze nella configurazione dello stesso interprete per la sessione interattiva e per l'esecuzione dello script.


-1

No. Uno script è un elenco di comandi che è possibile digitare nel terminale.

È possibile incollare la totalità di uno script nel terminale e il risultato sarà lo stesso di eseguirlo.

Inversamente, è possibile "salvare" i comandi del terminale all'interno di un file e trasformarlo in uno script riutilizzabile e condividerlo con la famiglia e gli amici.


4
No. Incollare il contenuto equivale a reperire lo script. Questo cambierà tutti i tipi di opzioni nella shell corrente, che non verrebbero modificati semplicemente eseguendo lo script.
michas,

hai ragione. ma per quanto riguarda le sue domande. Penso che possiamo dire che è abbastanza simile. ma sì, per tradurre ciò che micha ha detto in termini più nobili. incollare il contenuto dello script equivale a fare source script_file. che modificherà le variabili ENV nel contesto corrente. durante l'esecuzione dello script in quanto ./script_filenon modificherà ENV, a meno che non exportvenga utilizzato in modo esplicito.
Mathieu J.,

1
No. Anche con exportesso non è possibile per uno script modificare alcuna variabile della shell chiamante. Lo stesso vale per cose come PWD, alias definiti, funzioni e cose del genere. Possono essere modificati solo in modo interattivo o acquistando un file. Ma sì, probabilmente non è niente che qualcuno inciamperà il primo giorno. :)
michas,

1
@michas: bene, è ancora meglio dare la descrizione corretta. Se il principiante è ambizioso e ha abitudini di lavoro, prenderà rapidamente. Se proviamo a raccontare la storia del bambino, inciamperemo in piedi e faremo un'impressione incomprensibile - inoltre, il principiante potrebbe tornare, più tardi. Anche se non mi considero un principiante, ci sono molte cose che non so e sarei insultato se qualcuno trattenesse qualcosa rispondendo alle mie domande perché "non ci sei ancora, junior".
Emanuel Berg,
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.