Saya tahu bahwa saya dapat menjalankan perintah berikut
ls Some{File,Folder}
Dan itu setara dengan menjalankan ini:
ls SomeFile SomeFolder
(Saya juga banyak menggunakannya untuk hal-hal seperti mv place_{a,b}
)
Namun, saya bertanya-tanya apakah ada jalan pintas berbeda di mana saya bisa melakukan sesuatu seperti ini:
run-command --a --whole --lot --of --flags parameter a; \
run-command --a --whole --lot --of --flags parameter b
Dan saya hanya perlu mengetik run-command --a --whole --lot --of --flags parameter {a,b}
atau yang serupa.
shell
command-line
scripting
ashays
sumber
sumber
run-command
, banyak perintah Unix menangani beberapa argumen file secara berurutan.Jawaban:
Dengan asumsi bahwa Anda menggunakan GNU
bash
atau yang serupa:Mungkin satu
for
putaran?yang juga dapat ditulis dalam satu baris sebagai
for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done
sumber
for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
{a..z}
,*.pdf
,$(find ...)
...;
berikutdo
.;
.Jika Anda tidak membuat skrip ini dan hanya ingin menjalankannya dengan mudah di baris perintah,
xargs
perintah itu mungkin yang Anda cari.xargs akan mengambil banyak konten dari input standar, dan menggunakannya sebagai argumen untuk suatu perintah, menjalankan perintah itu beberapa kali jika diperlukan.
Coba yang berikut ini:
Dalam contoh ini, Anda hanya memberikan xargs permutasi yang Anda inginkan untuk dijalankan.
Bendera "-n 1" untuk memberi tahu xargs untuk menggunakan hanya 1 argumen per run.
Bendera "-d," memberi tahu xargs untuk mencari "," pada input sebagai pembatas di antara argumen yang akan dijalankan. (Perhatikan bahwa jika argumen memiliki "," di dalamnya, Anda perlu mengubahnya ke sesuatu yang lain. Jika argumen Anda tidak memiliki spasi di dalamnya, Anda dapat menghilangkan tanda ini sama sekali.)
Lihat
man xargs
untuk info lebih lanjut.sumber
Anda juga dapat menggunakan fungsi, yang tidak membatasi Anda untuk memiliki argumen yang berubah di akhir:
sumber
Anda dapat melakukan pergantian pada perintah sebelumnya. Ini tidak akan berfungsi dengan contoh {a, b} Anda, karena semua instance 'a' akan diganti dengan 'b'. Tapi bayangkan Anda ingin menjalankan perintah berikut:
Anda bisa melakukannya dengan
Bash akan melakukan pergantian dan lari
Gunakan gs (substitusi global) untuk melakukan beberapa substitusi, tidak hanya satu.
sumber
Ada
alias
perintah di bash:Penggunaannya adalah:
$ shotcommand a
sumber