0

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

基本上,我想查看列出的每个用户的 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

1 回答 1

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

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

于 2013-09-10T22:46:43.070 回答