繁体   English   中英

如何将输出/错误输出到文本文件?

[英]how to print the ouput/error to a text file?

我正在尝试将标准错误/输出重定向(?)到文本文件。 我做了研究,但是由于某种原因,在线答案对我不起作用。 我究竟做错了什么?

cd /home/user1/lists/

for dir in $(ls)
do
(
echo | $dir > /root/user1/$dir" "log.txt
) > /root/Desktop/Logs/Update.log
done

我也试过

2> /root/Desktop/Logs/Update.log
1> /root/Desktop/Logs/Update.log
&> /root/Desktop/Logs/Update.log

这些都不适合我:(

请帮助!

试试这个作为基础:

echo hello >> log.txt 2>&1

可以理解为:回声单词hello,重定向STDOUT并将其附加到文件log.txt。 STDERR(文件描述符2)重定向到指向STDOUT的任何位置。 请注意,STDOUT是默认设置,因此“ >>”前面没有“ 1”。 仅适用于当前行。

要重定向并附加脚本中所有命令的所有输出和错误,请将此行放在顶部附近。 它对脚本的长度有效,而不是在每一行上都执行:

exec >>log.txt 2>&1

如果您尝试获取/home/user1/lists中的文件/home/user1/lists ,则根本不需要循环:

ls /home/usr1/lists/ >Update.log

如果您尝试将目录中的每个文件作为可执行文件运行,并以换行符作为输入,并在Update.log收集所有这些程序的输出,请尝试以下操作:

for file in /home/user1/lists/*; do
    echo | "$file"
done >Update.log

(请注意,如何避免无用的ls以及循环内如何没有重定向。)

如果要为目录中的每个文件创建一个名为*.log.txt的空文件,则可以这样做

for file in /home/user1/lists/*; do
    touch "$(basename "$file")"log.txt
done

(使用basename获取不带目录部分的文件名可以避免使用cd但是您可以采用其他方法。通常,我们倾向于避免在脚本中更改目录,以便可以在任何位置运行该工具并在其中生成输出。当前目录。)

如果您要创建一个包含单个换行符的文件,无论该文件是否已存在,

for file in /home/user1/lists/*; do
    echo >"$(basename "$file")"log.txt
done

在您的原始程序中,您将循环内的echo重定向,这意味着done后的重定向将根本不会收到任何输出,因此创建的文件将为空。

这些对于您可能实际想要实现的目标有些疯狂,但是希望可以帮助您稍微朝着正确的方向前进。 (我想这应该是一条评论,但它太长且太复杂了。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM