Apakah ada cara untuk menjalankan perintah (misalnya ps aux|grep someprocess
) untuk n kali?
Sesuatu seperti:
run -n 10 'ps aux|grep someprocess'
Saya ingin menggunakannya secara interaktif, tolong jangan memposting skrip.
Pembaruan: Alasan saya menanyakan hal ini adalah, bahwa saya bekerja pada banyak mesin dan saya tidak ingin mengimpor semua skrip saya yang diadaptasi, dll ke dalam setiap kotak untuk mendapatkan fungsi yang sama di setiap mesin.
Jawaban:
Saya tidak berpikir perintah atau shell builtin untuk ini ada, karena itu adalah subset sepele dari apa
for
loop Bourne dirancang untuk dan mengimplementasikan perintah seperti ini sendiri karena itu cukup sederhana.Sebagai permulaan, Anda dapat menggunakan
for
loop dummy :Atau sesuai dengan saran JimB, menggunakan Bash bawaan untuk menghasilkan urutan:
Ini mengulangi sepuluh kali mengeksekusi
command
setiap kali - itu bisa berupa pipa atau serangkaian perintah yang dipisahkan oleh;
atau&&
. Anda bisa menggunakan$i
variabel untuk mengetahui iterasi tempat Anda berada.Jika Anda menganggap skrip satu baris ini dan karenanya untuk beberapa alasan yang tidak ditentukan (tapi mungkin valid) tidak diinginkan, Anda dapat mengimplementasikannya sebagai perintah, mungkin seperti ini pada .bashrc (belum diuji):
Pemakaian:
Contoh:
sumber
for
adalah bash built-in untuk iterasi.seq
{1..10}
.bashrc
jika{1..$number}
ditukar`seq $number`
.ps aux | grep someprocess
Sepertinya Anda ingin menonton perubahan program untuk waktu yang tetap. Eduardo memberikan jawaban yang menjawab pertanyaan Anda dengan tepat tetapi ada alternatifwatch
::Perhatikan bahwa saya telah menempatkan perintah dalam tanda kutip tunggal untuk menghindari shell dari menafsirkan perintah sebagai "jalankan watch ps aux" dan pipa hasilnya
grep someprocess
. Cara lain untuk melakukan perintah sebelumnya adalah:Secara default,
watch
menyegarkan setiap dua detik, yang dapat diubah menggunakan-n
opsi. Misalnya, jika ingin memiliki interval 1 detik:sumber
Hanya untuk bersenang-senang
sumber
for
sepertinya cara terbaik. Pokoknya terima kasih atas jawabannya.cmd ;!!
pada satu baris cukup ulangi perintah yang dimasukkan sebelum baris saat ini? Itu harus duahistory
entri terpisah .;
dengan&&
untuk berhenti pada kegagalan pertama.mirip dengan balasan sebelumnya, tetapi tidak memerlukan for loop:
output pipa seq ke xargs tanpa argumen atau opsi
sumber
echo "hello" 1 2 3 4 5 6 7 8 9 10
. Anda perlu menjalankan xargs dengan-n 1
untuk satu proses untuk setiap input (angka) dan dengan-P 10
untuk eksekusi paralel (10 proses paralel). Berakhir denganseq 10 | xargs -n 1 -P 10 echo
.Coba ini:
Ini membutuhkan perintah untuk dieksekusi dalam sub-shell, penalti kinerja sedikit. YMMV. Pada dasarnya, Anda mendapatkan perintah "ya" untuk mengulang string "ls" N kali; sementara "head -n5" mengakhiri loop pada 5 pengulangan. Pipa terakhir mengirim perintah ke shell pilihan Anda.
csh
Kerang mirip- kebetulan memilikirepeat
perintah bawaan. Anda bisa menggunakannya untuk mengeksekusi perintah Anda dalam sub-shell bash!sumber
Cara POSIX
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
yang tentu saja dapat dibuat menjadi satu liner:
dan tampaknya menjadi cara yang paling portabel, dan dengan demikian lebih sedikit membuat Anda menginstal program.
Berikut ini kurang portabel:
{1..10}
: spesifik bash, dan akan menghasilkan garis besar jika argumennya besarseq
: GNUyes
: GNUDan jika Anda bosan dengan portabilitas, pertimbangkan GNU
parallel
:yang menjalankan perintah secara paralel dan memiliki banyak opsi keren.
Lihat juga: https://stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash
sumber
sh, zsh, ksh
, danbash
semuanya didukung dengan baik di sebagian besar platform.csh, tcsh, fish
memiliki beberapa dukungan. Menggunakanparallel --embed
Anda bahkan dapat membuat skrip yang dapat dengan mudah dipindahkan ke sistem lain yang tidak memiliki GNU Paralel yang diinstal.Implementasi fish shell dari
run
fungsi @ eduardo-ivanec di atassumber
Itu akan menjadi 'tontonan' - harus menjadi bagian dari hampir setiap sistem unix menggunakan procps
Anda dapat melihat perubahan fs atau gerakan menarik dalam suatu sistem. Sebagai contoh,
Masukkan saja perintah Anda sebagai argumen (lihat
man watch
)sumber
Di macOS Anda dapat menggunakan
repeat
perintah.sumber