Saya mencari cara terbaik untuk menduplikasi perintah 'menonton' Linux di Mac OSX. Saya ingin menjalankan perintah setiap beberapa detik untuk mencocokkan pola pada isi file output menggunakan 'tail' dan 'sed'.
Apa pilihan terbaik saya di Mac, dan dapatkah itu dilakukan tanpa mengunduh perangkat lunak?
macos
bash
automation
watch
joseph.hainline
sumber
sumber
Jawaban:
Anda dapat meniru fungsionalitas dasar dengan loop shell:
Itu akan berulang selamanya, kosongkan layar, jalankan perintah Anda, dan tunggu dua detik - dasar
watch your_command
implementasi .Anda dapat mengambil langkah ini lebih jauh dan membuat
watch.sh
skrip yang dapat menerimayour_command
dansleep_duration
sebagai parameter:sumber
your_command
keyour_command 2>&1|head -10
sleep ${2:-1}
untuk membuat interval opsional.echo "$(date)"
setara dengandate
?watch
saat output lebih dari satu layar. Hanya menunjukkan akhir, sedangkanwatch
hanya menunjukkan atas. (Tidak ada yang ideal)Dengan Homebrew diinstal:
brew install watch
sumber
brew
di mac.watch
: stackoverflow.com/questions/13593771/…watch
dari buatan tampaknya tidak membaca alias pengguna. Saat menjalankanwatch somealias
, saya mendapatkan perintah yang tidak ditemukan.watch [command]
ketika Anda menggunakannyawatch somealias
dengan anggapan bahwa itusomealias
adalah perintah yang dapat Anda jalankan di terminal Anda.Gunakan macport :
sumber
watch
perintah secara langsung.watch
perintahnya rusak di MacPorts?shell di atas akan melakukan triknya, Anda bahkan bisa mengonversinya menjadi alias (mungkin perlu membungkus fungsi untuk menangani parameter)
Contoh:
Sebagai alternatif, homebrew dapat memasang arloji dari http://procps.sourceforge.net/
sumber
Mungkin "menonton" bukan yang Anda inginkan. Anda mungkin ingin meminta bantuan dalam menyelesaikan masalah Anda, bukan dalam mengimplementasikan solusi Anda! :)
Jika tujuan Anda sebenarnya adalah untuk memicu tindakan berdasarkan apa yang dilihat dari
tail
perintah , maka Anda dapat melakukannya sebagai bagian dari ekor itu sendiri. Alih-alih menjalankan "secara berkala", yangwatch
berfungsi, Anda dapat menjalankan kode sesuai permintaan .Catatan yang
tail -F
akan terus mengikuti file log bahkan jika diputar oleh newsyslog atau logrotate. Anda ingin menggunakan ini, bukan huruf keciltail -f
. Periksaman tail
detailnya.Yang mengatakan, jika Anda benar-benar ingin menjalankan perintah secara berkala, jawaban lain yang diberikan dapat diubah menjadi skrip shell pendek:
sumber
watch 2 cat *
akan memperluas parameter sebelum menjalankan skrip, sehingga dalam direktori dengan file "foo" dan "bar", Anda akan menjalankancat foo bar
setiap 2 detik. Perilaku apa yang Anda harapkan?*
tanpa meneruskannya ke perintah yang Anda jalankan. Coba jalankan:mkdir /tmp/zz; touch /tmp/zz/foo; watch -n 2 ls -l /tmp/zz/*
di satu jendela. Saat sedang berjalan, Anda bisatouch /tmp/zz/bar
di jendela lain. Lihat apakah "arloji" Anda melihat perubahan, di jendela pertama. Saya tidak berpikir itu akan terjadi. Bukan untuk saya. Ini tidak ada hubungannya dengan Ubuntu vs OSX atau Linux vs Unix, itu adalah perilakubash
itu sendiri.watch "ls -l /tmp/zz/*"
tetapi jika Anda ingat untuk menggunakan tanda kutip itu bekerja dengan skrip Anda juga. :)Pergi dengan jawaban dari sini :
Tapi Anda benar-benar lebih baik memasang arloji karena ini tidak terlalu bersih ..
sumber
brew install watch
Jika arloji tidak ingin dipasang melalui
Ada versi lain yang serupa / salin yang diinstal dan bekerja dengan baik untuk saya
https://github.com/tj/watch
sumber
Atau, di ~ / .bashrc Anda
sumber
Saya punya masalah serupa.
Ketika saya googled, saya menemukan tautan ini baru-baru ini. Ini bukan 'menginstal perangkat lunak', hanya mendapatkan biner untuk perintah 'menonton'.
Dan tautannya adalah Dapatkan perintah menonton untuk OSX
sumber
Inilah versi yang sedikit berubah dari jawaban ini yang:
Untuk menggunakannya:
~/bin/watch
chmod 700 ~/bin/watch
di terminal untuk membuatnya dapat dieksekusi.watch 1 echo "hi there"
~ / bin / tonton
sumber
Coba ini:
sumber
untuk mencegah kerlipan saat perintah utama Anda membutuhkan waktu yang bisa diselesaikan, Anda dapat menangkap output dan hanya membersihkan layar saat itu selesai.
function watch {while :; do a=$($@); clear; echo "$(date)\n\n$a"; sleep 1; done}
lalu gunakan dengan:
watch istats
sumber
Gunakan manajer paket nix !
Instal nix, maka
nix-env -iA nixpkgs.watch
dan itu harus tersedia untuk digunakan setelah menyelesaikan instruksi instalasi (termasuk sumber. "$HOME/.nix-profile/etc/profile.d/nix.sh"
di shell Anda).sumber