Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在嵌套的for循环中重定向out put_Bash_Shell_Redirect - Fatal编程技术网

Bash 在嵌套的for循环中重定向out put

Bash 在嵌套的for循环中重定向out put,bash,shell,redirect,Bash,Shell,Redirect,我正在写一个简单的脚本,它可以很好地将输出显示在屏幕上。我想将otuput重定向到一个以其中一个变量命名的文件,但它会不断创建没有输出的空文件 基本上,我希望看到列出的每个用户的crontab条目,并将输出重定向到一个文件,其中文件名是服务器名 创建文件-test.txt,但是crontab-u$n-l的输出不在那里,而是显示在屏幕上 任何帮助都将不胜感激 谢谢您每次都会覆盖hostname text.txt的内容,当最后一个用户是系统帐户或其他没有crontab的用户时,该文件将为空 同时

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

基本上,我希望看到列出的每个用户的crontab条目,并将输出重定向到一个文件,其中文件名是服务器名



创建文件
-test.txt
,但是
crontab-u$n-l
的输出不在那里,而是显示在屏幕上

任何帮助都将不胜感激


谢谢

您每次都会覆盖
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

(这忽略了间距、引用和效率方面的考虑,而倾向于严格遵守代码。)

您在主机上运行crontab,而不是在服务器上运行。是否打算这样做?尽管手册中对
-l
选项作了说明,您是否可以检查
crontab
是否实际写入标准错误
crontab-u$n-l 2>$i-text.txt
。实际上,这是错误的,它假设从每个框的/etc/passwd中提取用户,然后运行crontab-u$user-l并将此信息输出到一个文本文件,名为servername.txt
Crontab for user:
0 * * * * foo
0 4 * * * bar

Crontab for mysql:
no crontab for mysql