![](/img/trans.png)
[英]How to compare 2 lists without sorting the files and print data in ouput file keeping the order of one of the files
[英]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.