2013-09-10 155 views
0

即時通訊編寫一個簡單的腳本,它工作正常顯示輸出到屏幕。我想將該otuput重定向到一個以某個變量命名的文件,但它會一直創建沒有輸出的空文件。重定向輸出嵌套for循環

基本上,我想查看列出的每個用戶的crontab條目,並將輸出重定向到文件名稱爲服務器名稱的文件。


servers=`cat hosts.txt` 
for i in $servers; 
do 
    echo $i 
    users=`ssh $i cut -d ":" -f1 /etc/passwd` 
    for n in $users 
    do 
     crontab -u $n -l > $i-test.txt 
    done 
done 

文件<servername>-test.txt被創建但是從crontab -u $n -l輸出是不存在的,但會顯示在屏幕上。

任何幫助,將不勝感激。

感謝

+4

你正在主機上運行crontab,而不是你的服務器機器。它打算如此嗎? –

+0

儘管手冊中提到'-l'選項,你可以檢查'crontab'是否實際寫入標準錯誤嗎? 'crontab -u $ n -l 2> $ i-text.txt'。 – chepner

+0

實際上,這是錯誤的,它假設從每個盒子上的/ etc/passwd中拉出用戶並運行crontab -u $ user -l並將此信息放到文本文件中,名稱servername.txt – DRO

回答

0

您將要覆蓋的hostname-text.txt每次的內容,並在最後一個用戶爲系統帳戶或其他用戶沒有一個crontab,該文件將是空的。

同時,對於所有用戶,您將獲得crontab的錯誤輸出,「no crontab for ...」,因爲它會打印到stderr。

修復取決於你想要做什麼。下面是重定向整個循環一個小補丁,錯誤信息一起:

servers=`cat hosts.txt` 
for i in $servers; 
do 
    echo $i 
    users=`ssh $i cut -d ":" -f1 /etc/passwd` 
    for n in $users 
    do 
     echo "Crontab for $n:" 
     ssh "$i" crontab -u $n -l 
     echo 
    done > "$i-test.txt" 2>&1 
done 

這會給你一個包含一些文件myhost-test.txt

Crontab for user: 
0 * * * * foo 
0 4 * * * bar 

Crontab for mysql: 
no crontab for mysql 

(這忽略間距,報價和效率,有利於關注嚴格遵守你的代碼。)