我想将脚本printf
中 a的输出定向到而不是.bash
stderr
stdout
我不是在询问是否重定向它们stderr
或stdout
从它们当前路由的位置。我只是希望能够将输出从 a 发送printf
到stderr
而不是默认的stdout
.
我做了一些实验,发现附加1>&2
到printf
,如下面的示例所示,似乎可以满足我的要求。但是,我没有使用 bash 的经验。所以我的主要问题是是否有“更好”的方法来做到这一点bash
?
“更好”是指有另一种更常用、更传统或更惯用的方法吗?一个更有经验的 bash 程序员会怎么做呢?
#!/bin/bash
printf "{%s} This should go to stderr.\n" "$(date)" 1>&2
printf "[(%s)] This should go to stdout.\n" "$(date)"
我还有一个次要问题。我之所以问它不是因为我需要知道,而是更多是因为我只是好奇并且想更好地了解正在发生的事情。
上面的内容似乎只有在 shell 脚本中运行时才有效。当我从命令行尝试时,它似乎不起作用。
这是我的意思的一个例子。
irrational@VBx64:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun 9 14:08:46 EDT 2012} Sent to stderr.
irrational@VBx64:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun 9 14:39 errors.txt
我希望printf
上面的命令没有输出,因为输出应该去stderr
,然后应该去一个文件。但这不会发生。嗯?