Saya memiliki program yang tidak terlalu permisif untuk bekerja. Sayangnya, program ini tidak hanya mengizinkan yang berikut
"command -a -b -c"
atau
"command -abc"
Jadi saya selalu mengetik yang berikut ini
command -a && command -b && command -c
Saya cukup yakin ada cara yang lebih efisien untuk mengetik itu, tetapi tidak dapat menemukannya.
command-line
Douda
sumber
sumber
cmd -a; cmd -b; cmd -c
dalam jangka panjang, seperti semua manusia.command
. Secara umumcommand -a -b -c
,,command -abc
dancommand -a && command -b && command -c
memiliki arti yang berbeda ..Jawaban:
Anda bisa melakukannya:
Atau:
dengan beberapa kerang.
Namun berhati-hatilah bahwa itu mempengaruhi stdin dari
command
.Dengan
zsh
:Atau sederhananya:
Tak satu pun dari mereka akan membatalkan jika salah satu
command
doa gagal (kecuali jika gagal dengan status keluar 255).Untuk itu, Anda ingin:
Itu masih gagal ke
$?
status keluar daricommand
doa yang gagal ). Anda dapat mengubahnya menjadi:Tetapi pada saat itu, sudah lebih lama dari:
sumber
Anda bisa merujuk kata pertama dari baris perintah sebelumnya (
command
dalam kasus Anda) dengan ekspansi sejarah!!:0
dan kemudian Anda bisa menambahkan argumen yang diperlukan untuk itu.Sebagai contoh:
Perhatikan bahwa, seperti yang ditunjukkan oleh Stéphane Chazelas , ini dapat menghasilkan ekspansi yang tidak terduga juga.
sumber
!!:0
(di shell yang mendukung ekspansi sejarah csh) akan diperluas ke kata pertama dari command- line sebelumnya, bukan perintah sebelumnya.uname
dan kemudianecho foobar && !!:0 spamegg && !!:0 baz
, itu akan diperluas keecho foobar && uname spamegg && uname baz
.!
sudah cukup:!:0
tetapi dengan poin @ StéphaneChazelas lebih baik digunakan di!#:0
mana!#
artinya Seluruh baris perintah diketik sejauh ini .Bagaimana dengan fungsi shell yang membungkus sebuah loop?
Di mana "benda" adalah perintah aktual yang ingin Anda panggil. Maka sederhananya
Anda bahkan dapat menggeneralisasi ini ke perintah apa pun:
Kemudian
sumber
Di tengah jawaban yang kreatif dan berwawasan luas, ada sesuatu yang sederhana dengan nama mengetik lebih sedikit karakter:
sumber
Buat skrip shell MultiRun , yang mengambil Parameter pertama sebagai Perintah dan menjalankannya dengan Parameter yang tersisa satu per satu.
./ MultiRun curl ABCD
Script Anda harus menggunakan curl sebagai perintah dan menjalankan "curl A", "curl B", "curl C", "curl D". Sekarang, karena skrip Anda dalam kontrol, Anda dapat memutuskan apakah kegagalan dalam satu perintah akan menghentikan skrip atau melanjutkan ke Parameter berikutnya atau menunggu input pengguna atau apa pun. Anda bahkan dapat memutuskan status keluar dari keseluruhan skrip, berdasarkan pada eksekusi perintah individu.
MultiRun Script dapat berupa seperti ini:
Sekarang jalankan ini:
./MultiRun echo 1 2 3 4
untuk mendapatkan output dari "echo 1", "echo 2", "echo 3", "echo 4" seperti ini:
1
2
3
4
Ini adalah solusi yang sangat fleksibel & dapat digunakan kembali.
sumber