如何在UNIX上重定向stdout管道和stderr管道nn ksh? (不是Linux)。
以下工作重定向到文件:
x=0
while [[ "$x" -lt 100 ]]; do
echo "junk" >&2
echo "$x log test"
echo "junk err" &>2
echo "$x err test" >&2
x=$(($x+1))
done 2>out1.err 1>out1.log
我已尝试将管道重定向到其他进程,如下所示,但这不起作用:
x=0
while [[ "$x" -lt 100 ]]; do
echo "junk" >&2
echo "$x log test"
echo "junk err" &>2
echo "$x err test" >&2
x=$(($x+1))
done 2>&3 | sort -u > out2.log 3>&1 | sort -u > out2.err
答案 0 :(得分:1)
some_process 1> >(do_something_with stdout) 2> >(do_something_else_with stderr)
答案 1 :(得分:0)
这是您的代码2>&3 | sort -u > out2.log 3>&1
的问题。在命令完全执行之前,管道不会链接FD或文件。
例如,请考虑以下文件bla:
bash-4.0$ cat bla
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在执行以下命令之前,(注意:名为blu 的文件不存在。)
bash-4.0$ cat bla > blu | sort < blu
bash: blu: No such file or directory
现在如果列出目录,你会看到一个蓝色创建。那是因为cat bla&gt; blu正确执行但在执行整个命令之前没有文件。因此当sort尝试读取blu时,它会抛出一个错误,因为它不存在。不要错误地误用“|”为一个 ”;” 。它们完全不同。 希望这有帮助。