Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Unix 如何使用脚本在多个文件上跟踪-f?_Unix_Ksh - Fatal编程技术网

Unix 如何使用脚本在多个文件上跟踪-f?

Unix 如何使用脚本在多个文件上跟踪-f?,unix,ksh,Unix,Ksh,我试图在ksh中跟踪多个文件。我有以下脚本: test.sh #!/bin/ksh for file in "$@" do # show tails of each in background. tail -f $file>out.txt echo "\n" done 它只读取我提供给脚本的第一个文件参数。不读取其他文件作为脚本的参数 当我这样做时: ./test.sh /var/adm/messages /var/adm/logs 它

我试图在ksh中跟踪多个文件。我有以下脚本:

test.sh

#!/bin/ksh

for file in "$@"
do
        # show tails of each in background.
        tail -f $file>out.txt
        echo "\n"
done
它只读取我提供给脚本的第一个文件参数。不读取其他文件作为脚本的参数

当我这样做时:

./test.sh /var/adm/messages /var/adm/logs
它只是读取/var/adm/消息,而不是日志。知道我可能做错了什么吗

您应该使用双“>>”语法在输出文件末尾重定向流。 一个简单的“>”重定向将在文件开头写入流,从而删除以前的内容

因此,请尝试:

#!/bin/ksh

for file in "$@"
do
        # show tails of each in background.
        tail -f $file >> out.txt & # Don't forget to add the last character
done

编辑:如果要使用多尾,默认情况下不安装。在Debian或Ubuntu上,您可以使用apt get install multi tail。

您的评论是“在后台显示尾部”,但重定向意味着您将看不到任何输出——它将被捕获到文件中。但是,正如K4timini指出的,您应该只在输出中看到
日志
文件(而不是
消息
),因为使用
而不是
>
,为了安全起见,可能在
“$file”
周围使用引号。您需要
-f
选项吗?随着文件的增长,它会“跟随”文件,并且在第一次调用时不会返回,直到它被ctrl中断。这在我的系统中不起作用。你确定这很好用吗?我每次只能看到附加的第一个文件的o/p。如果要在文件中为每个输入文件写入输出流,则必须使用>>操作数在文件末尾写入。但是,如果您只想在终端中显示它,则需要删除“>out.txt”以重定向控制台中的流。>>&>是用于重定向流的两个操作数。@K4timini,我试图将第一个文件的尾部-f捕获到第二个文件。在行的末尾添加一个“&”操作数。(我编辑了我以前的帖子)。它在MacOSX和Debian服务器上运行良好。如果对您合适,请标记已解决@K4timini,另一个简短的问题。如果我想在每个条目旁边的out.txt文件中包含主机名和文件名,我该怎么做?