Saya mencoba untuk menggabungkan beberapa perintah linux dalam satu baris untuk melakukan operasi penyebaran. Sebagai contoh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
sumber
Saya mencoba untuk menggabungkan beberapa perintah linux dalam satu baris untuk melakukan operasi penyebaran. Sebagai contoh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Jika Anda ingin menjalankan setiap perintah hanya jika yang sebelumnya berhasil, maka 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 dieksekusi.
Jika Anda ingin menjalankan semua perintah terlepas dari apakah yang sebelumnya gagal atau tidak, pisahkan dengan koma:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Dalam kasus Anda, saya pikir Anda ingin kasus pertama di mana pelaksanaan perintah selanjutnya tergantung pada keberhasilan yang sebelumnya.
Anda juga dapat menempatkan 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 dari berpikir bahwa baris berikutnya adalah perintah baru; jika Anda menghilangkan garis miring terbalik, Anda perlu menulis seluruh perintah dalam satu baris.)
Simpan itu ke file, misalnya myscript
, dan buat itu 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 tercantum dalam PATH
variabel lingkungan Anda (misalnya /usr/local/bin
, atau pada beberapa distribusi Linux ~/bin
), maka Anda perlu menentukan path ke skrip itu. Jika ada 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 tanpa syarat semua perintah, cukup daftarkan setiap perintah pada barisnya sendiri:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
||
alih-alih titik koma atau&&
jika Anda hanya ingin perintah berikutnya dijalankan jika yang terakhir gagal. Seperti dalam coba ini, dan jika gagal, coba itu.ls >/dev/null & ; echo $!
memicu kesalahan.tail -f my.log & && ./myscript
yang tidak berfungsi .. tolong sarankan.{ tail -f my.log & } && ./myscript
Namun, perhatikan bahwa&&
tidak ada gunanya di sini, karena pekerjaan pertama berjalan di latar belakang dan dengan demikian pekerjaan kedua tidak dapat mengetahui hasilnya, karena kedua pekerjaan akan dimulai pada saat yang sama. Jadi, Anda sebaiknya menulis:{ tail -f my.log & }; ./myscript
sudo
izin untuk menjalankan salah satu perintah? Haruskah saya meletakkannyasudo
di awal semua perintah atau hanya di salah satu yang membutuhkannya? Bagaimana saya bisa meneruskan kata sandi ke perintah itu sehingga dieksekusi dengan baik?Saya telah menemukan bahwa menggunakan; untuk memisahkan perintah hanya berfungsi di latar depan. misalnya:
cmd1; cmd2; cmd3 &
- hanya akan mengeksekusicmd3
di latar belakang, sedangkancmd1 && cmd2 && cmd3 &
- akan mengeksekusi seluruh rantai di latar belakang JIKA tidak ada kesalahan.Untuk memenuhi eksekusi tanpa syarat, menggunakan kurung memecahkan ini:
(cmd1; cmd2; cmd3) &
- akan menjalankan rantai perintah di latar belakang, meskipun langkah apa pun gagal.sumber
Anda dapat memisahkan perintah Anda menggunakan titik koma:
Apakah itu yang kamu maksud?
sumber
Untuk menjalankan semuanya sekaligus, Anda dapat menggunakan kunci garis pipa "|" seperti itu:
sumber
Jika Anda ingin menjalankan semua perintah, apakah yang sebelumnya dijalankan atau tidak, Anda dapat menggunakan titik koma (;) untuk memisahkan perintah.
Jika Anda ingin menjalankan perintah berikutnya hanya jika perintah sebelumnya berhasil, maka Anda dapat menggunakan && untuk memisahkan perintah.
Dalam kasus Anda, eksekusi perintah berurutan tampaknya bergantung pada perintah sebelumnya, jadi gunakan contoh kedua yaitu gunakan && untuk bergabung dengan perintah.
sumber
sumber
cmd1 || cmd2
pemisah jika Anda hanya perlucmd2
mengeksekusi jikacmd1
mengembalikan status bukan nol ke shell, dan Anda dapat menggunakancmd1 ; cmd2
jika Anda ingin menjalankan kedua perintah terlepas dari status pengembaliannya.Apa kegunaan satu Ampersand saja? Pagi ini, saya membuat peluncur di panel XFCE (di Manjaro + XFCE) untuk meluncurkan 2 pengelola kata sandi secara bersamaan:
Tetapi itu tidak bekerja seperti yang saya inginkan. IE, aplikasi pertama dimulai tetapi yang kedua dimulai hanya ketika sebelumnya ditutup
Namun, saya menemukan itu (dengan hanya satu ampersand):
dan itu berfungsi seperti yang saya inginkan sekarang ...
sumber
;
, kecuali bahwa ini menempatkan comman sebelum di latar belakang, yaitu shell tidak akan melihat hasilnya.Anda dapat menggunakan kode berikut;
Berhasil...
sumber
Saya menemukan banyak jawaban untuk pertanyaan semacam ini menyesatkan
Diubah dari pos ini: https://www.webmasterworld.com/linux/3613813.htm
Kode berikut akan membuat jendela bash dan berfungsi persis seperti jendela bash. Semoga ini membantu. Terlalu banyak jawaban salah / tidak berfungsi di luar sana ...
sumber