重定向输入嵌套for循环

时间:2013-09-10 20:31:32

标签: bash shell redirect

我正在编写一个工作正常的简单脚本,将输出显示在屏幕上。我想将该输出重定向到一个以其中一个变量命名的文件,但它不断创建没有输出的空文件。

基本上,我想查看列出的每个用户的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的输出不存在,但显示在屏幕上。

任何帮助将不胜感激。

感谢

1 个答案:

答案 0 :(得分: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

(这忽略了间距,引用和效率方面的问题,有利于密切关注您的代码。)