Jalankan
watch "COLUMNS= ps aux | grep TheProcessYouWatch"
Penjelasan:watch
menyetel variabel env tambahan tertentu, yaitu COLUMNS
dan LINES
. Ini dapat dengan mudah diverifikasi dengan membandingkan env | grep COLUMNS
dan watch 'env | grep COLUMNS'
.
Ketika COLUMNS
disetel, ps
memotong keluarannya menjadi banyak karakter dalam satu baris, bahkan jika keluaran disalurkan ke grep
(atau sesuatu yang lain). (ps
, kenapa kamu melakukan ini padaku?). Memaksa COLUMNS
menjadi kosong di dalam watch
perintahnya cukup untuk membuat ps
berfungsi seperti yang diharapkan OP (dan saya).
Btw, untuk menghindari watch
dan grep
proses menjadi bagian dari keluaran yang Anda pantau, pertimbangkan untuk menambahkan []
seperti ini:
watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
(Tentu saja, saya sarankan untuk membiasakan diri dengan pgrep
juga. Jawaban lain akan sangat membantu dalam hal ini.)
Seperti yang disebutkan dalam edit pertanyaan dan jawaban xzfc, masalahnya tampaknya terkait dengan pembungkus baris tmux. Untuk sesuatu yang lebih dekat dengan pengganti drop-in ps aux | grep [q]uote
, jika Anda tidak memerlukan informasi pengguna, coba:
$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote
$ watch pgrep -af [q]uote
-a
flag membuat output menyertakan argumen baris perintah, sedangkan -f
memungkinkan Anda menelusuri argumen baris perintah serta hanya nama proses.
ps
adalah utilitas yang menghasilkan keluaran yang dapat dibaca manusia, dan mengandalkan teks yang dapat dibaca manusia adalah ide yang buruk. Anda harus menggunakan pgrep myShittyProcess
bukannya ps aux | grep myShittyProcess
. pgrep
menghasilkan daftar pid yang kosong, dan jika Anda ingin keluaran yang tidak terlalu membosankan, Anda dapat memberikan pgrep
output ke ps
:
ps -opid,user,args -p `pgrep myShittyProcess`
Untuk menggunakan one-liner itu dengan watch
Anda harus menyertakannya dalam ' '
(bukan " "
) untuk mencegah substitusi perintah shell awal:
watch 'ps -opid,user,args -p `pgrep myShittyProcess`'