Anda dapat memisahkan perintah menggunakan titik koma:
cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install
Apakah itu yang Anda maksud?
Jika Anda ingin menjalankan setiap perintah hanya jika yang sebelumnya berhasil, gabungkan mereka menggunakan &&
operator:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Jika salah satu perintah gagal, maka semua perintah lain yang mengikutinya tidak akan dijalankan.
Jika Anda ingin menjalankan semua perintah terlepas dari apakah yang sebelumnya gagal atau tidak, pisahkan dengan titik koma:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Dalam kasus Anda, saya rasa Anda menginginkan kasus pertama di mana eksekusi perintah berikutnya bergantung pada keberhasilan perintah sebelumnya.
Anda juga dapat meletakkan semua perintah dalam skrip dan menjalankannya sebagai gantinya:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
Garis miring terbalik di akhir baris ada untuk mencegah shell berpikir bahwa baris berikutnya adalah perintah baru; jika Anda menghilangkan garis miring terbalik, Anda harus menulis seluruh perintah dalam satu baris.
Cara yang lebih nyaman dibandingkan menggunakan garis miring terbalik dan &&
di mana-mana adalah menginstruksikan shell untuk keluar dari skrip jika ada perintah yang gagal. Anda melakukannya dengan menggunakan set
fungsi bawaan dengan -e
argumen. Dengan itu, Anda dapat menulis skrip dengan cara yang jauh lebih alami:
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Simpan itu ke file, misalnya myscript
, dan membuatnya dapat dieksekusi:
chmod +x myscript
Anda sekarang dapat menjalankan skrip itu seperti program lain di mesin. Tetapi jika Anda tidak menempatkannya di dalam direktori yang terdaftar di PATH
Anda variabel lingkungan (misalnya /usr/local/bin
, atau pada beberapa distribusi Linux ~/bin
), maka Anda perlu menentukan jalur ke skrip tersebut. Jika berada di direktori saat ini, Anda menjalankannya dengan:
./myscript
Perintah dalam skrip bekerja dengan cara yang sama seperti perintah pada contoh pertama; perintah selanjutnya hanya dijalankan jika yang sebelumnya berhasil. Untuk eksekusi semua perintah tanpa syarat, jangan panggil set -e
:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Saya telah menemukan bahwa menggunakan; untuk memisahkan perintah hanya berfungsi di latar depan. misalnya:
cmd1; cmd2; cmd3 &
- hanya akan mengeksekusi cmd3
di latar belakang, sedangkan cmd1 && cmd2 && cmd3 &
- akan mengeksekusi seluruh rantai di latar belakang JIKA tidak ada kesalahan.
Untuk melayani eksekusi tanpa syarat, menggunakan tanda kurung menyelesaikan ini :
(cmd1; cmd2; cmd3) &
- akan menjalankan rangkaian perintah di latar belakang, bahkan jika ada langkah yang gagal.
Untuk menjalankan semuanya sekaligus, Anda dapat menggunakan kunci jalur pipa "|" seperti itu:
$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install