簡體   English   中英

如何在shell腳本中添加`watch'命令?

[英]How do I add `watch' command to a shell script?

我有一個greps和awks的腳本,並計算具有多個http狀態代碼的ip地址。 盡管腳本是什么並不重要,因為我的目標如下:

我想在此腳本中調用`watch'命令,以便每隔幾秒鍾使用從動態apache日志收到的新數據更新顯示。

我可以按如下方式調用我的腳本:

$ watch --no-title ./bad_request.sh

但我寧願在腳本本身內部使用`watch'命令,以便從命令提示符調用腳本更清晰。

這是腳本:

#!/bin/bash
#identify repeated offenders through 401 and 403 status codes
  for ip in `awk '{print $1}' /var/log/apache2/* | sort -u`; do echo -n "$ip "; awk '{print $1 " " $9}' /var/log/apache2/* | egrep "( 401| 403)"| grep -c $ip; done | sort -k2 -r

現在,我已經嘗試在腳本中插入“watch -d --no-title”,就在for循環之前,但它出錯了。 我認為這是因為它只是處理直到它到達第一個命令的末尾。 我已經嘗試在整個腳本周圍添加反引號和$()。 我也嘗試使腳本的大部分成為bash函數,並在函數上調用watch。 沒有骰子。

有任何想法嗎?

順便說一下,我也對腳本的改進持開放態度 - 我確實意識到它有點多余/低效。 當然,這可能應該保留給不同的Stack Overflow問題。

謝謝,

凱文

編輯:還有一件事,我可以while true; do <bulk of script>; sleep 1; clear;打電話while true; do <bulk of script>; sleep 1; clear; while true; do <bulk of script>; sleep 1; clear; 但我討厭那個。 它有效,但屏幕閃爍,這不是正確的方法。

編輯2:另一個令人討厭的黑客工作,就是簡單地創建兩個腳本。 第一個是:

watch --no-title ./bad_request

然后只需調用該腳本。 這很好,但必須有一個更好的方法。

編輯3(對不起......):我把'-d標志從'看'上取下來了。 這對我的劇本來說沒有必要。

注意unix哲學:

 A program should do one and only one thing and do it well.

適用於您的案例:

A script should do one and only one thing and do it well.

你的“討厭的黑客”實際上是朝着正確方向邁出的一步。

你永遠不會知道是否有一天你需要在另一個劇本上“觀看 - 無標題”。 那時如果你遵循unix哲學,你已經有了一個腳本來做到這一點。

你已經看到一個復雜的嘗試讓一個腳本一次做太多事情 - 引用地獄。

把事情簡單化。

正確的用法是:

watch -d --no-title "/bin/bash for ip in `awk '{print $1}' /var/log/apache2/* | sort -u`; do echo -n "$ip "; awk '{print $1 " " $9}' /var/log/apache2/* | egrep '( 401| 403)'| grep -c $ip; done | sort -k2 -r"

tail -f <file>幫助嗎?

男人的尾巴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM