2016-02-18 40 views
0

試圖輸出cronjobs列表,而不是用戶列表。 crontab -l的原始輸出太髒了,我似乎無法清理它。我運行這個sudo script.shsu然後運行它。我也嘗試過調用它sudo script.sh | grep -v no。我很迷惑,爲什麼這不起作用:列出所有cronjobs,如果有任何沒有多餘的信息

#!/bin/bash 
#Trying to show all cronjobs but no extraneous info 
# 
# This shows "no crontab for USER" for every USER without 
# a crontab - I only want to see actual cronjobs, not a long 
# list of users without crontabs 
echo "Here is the basic output that needs manipulation: 
" 
for USER in `cat /etc/passwd | cut -d":" -f1`; do 
    crontab -l -u $USER 
done 
# 
# grep -v fails me 
# (grep'ing the output of the script as a whole fails also) 
echo " 
trying with grep -v no on each line: 
" 
for USER in `cat /etc/passwd | cut -d":" -f1`; do 
    crontab -l -u $USER | grep -v no 
done 

echo " 
maybe with quotes around the no: 
" 
for USER in `cat /etc/passwd | cut -d":" -f1`; do 
    crontab -l -u $USER | grep -v "no" 
done 

# string manipulation - I can't even get started 
echo " 
And here I try to put the commmand output into a string so I can manipulate it further, and use an if/then/fi on the product: 
" 
for USER in `cat /etc/passwd | cut -d":" -f1`; do 
    STRING="$(crontab -l -u $USER | grep -v no)" 
    echo "STRING: $STRING" 
done 

BTW,有更簡單的方式來獲得代碼格式化正確這裏比在每行開頭的4位粘貼?我必須嘗試了40分鐘。不抱怨,只是問。

+0

選擇(繪製)整個代碼塊並按下ctrl-K進行格式化。 – tripleee

回答

0

crontab將「沒有用戶的crontab」連接到標準錯誤。要擺脫這些消息,您可以在循環中運行

crontab -l -u $USER 2>/dev/null 

我也建議將USER重命名爲其他東西。 USER變量名稱是保留的,應該設置爲您的用戶(登錄)名稱。通常,您應該使用小寫變量名稱,以避免這種名稱衝突。

+0

謝謝 - 錯誤,而不是輸出,就是這樣。我通過添加錯誤重定向來驗證它,這個錯誤重定向對腳本起作用,並且只是通過回顯$?來強迫它。使用變量USER不是問題,並且在for循環上下文中,它應該爲所有用戶捕獲cronjobs,這是我的意圖。我點擊了複選標記,但沒有看到任何事情發生。我稍後再檢查一次。 –

+0

如果可以,我會編輯我之前的評論。在重讀時,我明白你對變量名的含義。好的提示,謝謝。 –

相關問題