23 Nisan 2020 Perşembe

watch komutu - Belirtilen String'i Periyodik Olarak Çalıştırır

Giriş
watch belirtilen string'i her 2 saniyede bir çalıştırır. Söz dizimi şöyle. Command tırnak içinde olmalı
watch [options] 'command'
watch string'i çalıştırmak için /bin/sh kabuğunu kullanır. Açıklaması şöyle
The watch command invokes commands via a non-interactive /bin/sh shell.
Dolayısıyla watch ve alias birlikte iyi çalışmıyorlar. Bir çözüm burada
Örnek
Görmek için şöyle yaparız
alias gpu='sensors nouveau-pci-0100'
alias cpu='sensors coretemp-isa-0000'

ve şöyle yapalım

watch gpu

Çıktı olarak şunu alırız

sh: 1: gpu: not found
watch ve Çalıştırılan Komutun Çıktısını Formatlama
Bazen bir komutun direkt çıktısı ile watch ile çağrılınca verdiği çıktı farklı olabiliyor.
Örnek
ls komutunun çıktısı şöyle. Yani satır satır
$ls /dev/tty*
/dev/tty    /dev/tty12  /dev/tty17  ..
/dev/tty0   /dev/tty13  /dev/tty18  ...
/dev/tty1   /dev/tty14  /dev/tty19  ...
/dev/tty10  /dev/tty15  /dev/tty2   ...
/dev/tty11  /dev/tty16  /dev/tty20  ...
watch ile çalıştırırsak şöyle olur
$ watch -d -n1 'ls /dev/tty*'
Every 1.0s: ls /dev/tty*

/dev/tty
/dev/tty0
/dev/tty1
/dev/tty10
/dev/tty11
/dev/tty12
/dev/tty13
/dev/tty14
/dev/tty15
/dev/tty16
/dev/tty17
/dev/tty18
/dev/tty19
/dev/tty2
/dev/tty20
/dev/tty21
...
Bu durumda komutu değiştirmek gerekir. Şöyle yaparız
$ watch -d -n1 'ls -C /dev/tty*'
watch Komutu sh Kabuğunu kullanır
Açıklaması şöyle. Burada tek tırnak kullanılmasının sebebi tek tırnağın raw string gibi çalışması.
Since watch [options] 'command' executes command using sh -c by default, you can use it run snippets of shell code directly provided that:

1. you get the quoting right and
2. your code is sh-compatible i.e. doesn't use any bash/zsh/csh-"isms"
Örnek
Eğer uzun bir komut kullanmak istersek komutumuzu bir betik içine yazarı. Şöyle yaparız
#!/bin/bash
if whois abcxyz.com | grep -q 'string'; then
    echo 'Message line 1'
else
    echo 'Message line 2'
fi
Çağırmak için şöyle yaparız
watch -n 3600 $HOME/bin/foo
Veya tırnak içinde kullanırız. Şöyle yaparız
$ watch -n 36 'if whois abcxyz.com | grep -q "string"; then
  echo "Message line 1" | ts
  echo "Message line 2" | ts
fi'
Örnek
Şöyle yaparız.
watch top -b
Örnek
Şöyle yaparız
watch head -n 17 *
-differences seçeneği
Örnek
Şöyle yaparız
# You can also watch the data changing. Try…
watch –interval=1 –differences 'mysql -uuser -ppassword -e "show slave status\G"'
-g/-chgexit seçeneği
Açıklaması şöyle
Exit when the output of command changes.
Örnek
Komutun çıktısı değişince watch'u durdurmak için şöyle yaparız
watch -g -n 5 'date +%H:%M'
-n seçeneği
Çalıştırma sıklığını saniye cinsinden belirtir.

Örnek
Her 100 milisaniyede bir çalıştırmak için şöyle yaparız.
watch -n 0.1 'cat /proc/cpuinfo | grep MHz'
Diğer
watch komutu yerine kendi döngümüzü yazarsak şöyle yaparız.
while sleep X; do 
   clear; 
   command1;
   command2;
done
-t, -no-title seçeneği
Çıktıdaki başlık kısmını göstermez

Örnek
Şöyle yaparız
watch -ctn 1 bash time.sh

Hiç yorum yok:

Yorum Gönder