我正在编写一个工作正常的简单脚本,将输出显示在屏幕上。我想将该输出重定向到一个以其中一个变量命名的文件,但它不断创建没有输出的空文件。
基本上,我想查看列出的每个用户的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
的输出不存在,但显示在屏幕上。
任何帮助将不胜感激。
感谢
答案 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
(这忽略了间距,引用和效率方面的问题,有利于密切关注您的代码。)