GNU/Linux >> Linux Esercitazione >  >> Linux

Esegui combina più comandi Linux in una riga

Puoi separare i tuoi comandi usando un punto e virgola:

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install

Era questo che intendevi?


Se vuoi eseguire ogni comando solo se il precedente ha avuto successo, combinali usando && operatore:

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

Se uno dei comandi fallisce, tutti gli altri comandi successivi non verranno eseguiti.

Se vuoi eseguire tutti i comandi indipendentemente dal fatto che i precedenti siano falliti o meno, separali con il punto e virgola:

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

Nel tuo caso, penso che tu voglia il primo caso in cui l'esecuzione del comando successivo dipende dal successo del comando precedente.

Puoi anche inserire tutti i comandi in uno script ed eseguirlo invece:

#! /bin/sh

cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install

Le barre rovesciate alla fine della riga servono a impedire alla shell di pensare che la riga successiva sia un nuovo comando; se ometti le barre rovesciate, dovresti scrivere l'intero comando in una sola riga.

Un modo più conveniente rispetto all'uso di barre rovesciate e && ovunque serve a istruire la shell a uscire dallo script se uno qualsiasi dei comandi fallisce. Lo fai usando il set funzione integrata con -e discussione. Con questo, puoi scrivere una sceneggiatura in un modo molto più naturale:

#! /bin/sh
set -e

cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install

Salvalo in un file, ad esempio myscript e rendilo eseguibile:

chmod +x myscript

Ora puoi eseguire quello script come altri programmi sulla macchina. Ma se non lo metti all'interno di una directory elencata nel tuo PATH variabile di ambiente (ad esempio /usr/local/bin , o su alcune distribuzioni Linux ~/bin ), sarà necessario specificare il percorso di quello script. Se è nella directory corrente, eseguilo con:

./myscript

I comandi nello script funzionano allo stesso modo dei comandi nel primo esempio; il comando successivo viene eseguito solo se il precedente ha avuto successo. Per l'esecuzione incondizionata di tutti i comandi, semplicemente non chiamare set -e :

#! /bin/sh

cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install

Ho scoperto che usando; separare i comandi funziona solo in primo piano. es :

cmd1; cmd2; cmd3 & - eseguirà solo cmd3 in background, mentrecmd1 && cmd2 && cmd3 & - eseguirà l'intera catena in background SE non ci sono errori.

Per soddisfare l'esecuzione incondizionata, l'uso delle parentesi risolve questo :

(cmd1; cmd2; cmd3) & - eseguirà la catena di comandi in background, anche se qualche passo fallisce.


Per eseguirli tutti in una volta, puoi utilizzare il tasto della riga della pipeline "|" in questo modo:

$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install

Linux
  1. Invia comandi a più sessioni SSH con Terminator

  2. Tutorial Unix Sed:come eseguire più comandi Sed

  3. Esegui i comandi della shell dal programma in esecuzione in WINE

  4. inviare posta dal terminale Linux in una riga

  5. Ottieni l'ennesima riga di più file in Linux

Esegui comandi su sistemi Linux remoti tramite SSH

Copia un file in più directory dalla riga di comando su Linux

Come eseguire più comandi Linux in un unico comando

Come unire più file PDF in un unico PDF in Linux

Come eseguire più comandi Linux contemporaneamente nel terminale Linux

5 comandi per visualizzare il contenuto di un file nella riga di comando di Linux