如何在while循环中重定向stderr和stdout

时间:2014-10-15 20:38:34

标签: bash while-loop stdout stderr

我有一个循环设置来搜索数据文件,并使用数据文件的每一行作为参数执行命令。 PUBLISH参数可以有空格,这就是为什么我有不同的转义。我希望能够将循环的每次迭代输出stderr和stdout到另一个日志文件:

while read VARIABLE1 PUBLISH LOGFILENAME
do
/home/script_name  -switch $VARIABLE1 -switch2 \"$PUBLISH\" >> /log/$LOGFILENAME 2>&1
done < $INPUTFILE

要创建的日志文件LOOKS - 也就是说 - 当我执行ll并且它看起来有大小时我可以看到它 - 但是当我尝试捕获文件时 - 我得到了:

# ll logfile
-rw-r--r-- 1 root root     3205 2014-10-15 12:52 logfile
# pg logfile 
pg: logfile: No such file or directory 
# cat logfile 
cat: logfile: No such file or directory 
# read -r logfile 
^C (ctrl-c'd after no display) 
# file logfile 
logfile: ERROR: cannot open `logfile' (No such file or directory) 

命令运行正常 - 但我无法创建日志文件。如果我删除重定向字符串(&gt;&gt; / log / $ LOGFILENAME 2&gt;&amp; 1) - COMMAND输出就会很好地进入屏幕。我正在执行脚本并以root身份读取日志文件 - 因此权限不应成为问题。

1 个答案:

答案 0 :(得分:0)

感谢n.m.谁让我走上正轨我将输出文件名更改为硬编码名称并且它有效 - 我能够看到日志文件并将其分页。我回去查看原始的$ INPUTFILE,发现LOGFILENAME变量中的变量名后面有一个SPACE。