linux - 如何将标准错误重定向到文件

标签 linux bash io-redirection

在 linux 中,如果我想将标准错误重定向到一个文件,我可以这样做:

$ls -l /bin/usr 2> ls-error.txt

但是当我尝试时:

$foo=
$echo ${foo:?"parameter is empty"} 2> ls-error.txt

终端的结果是:

bash: foo: parameter is empty

没用! 有人可以解释为什么吗? 我认为 ${parameter:?word} 会将 word 的值发送到标准错误。

最佳答案

echo ${foo:?"parameter is empty"} 2>ls-error.txt重定向echostderr,但是错误消息是由 shell 在展开时产生的 ${foo:?"参数为空"}

您可以通过重定向 block (或子 shell)来获得您想要的结果,以便在重定向中包含 shell 的标准错误:

{ echo "${foo:?"parameter is empty"}"; } 2>ls-error.txt

关于linux - 如何将标准错误重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682677/

相关文章:

regex - 返回具有 grep 匹配的制表符分隔的 csv 文件的整列

linux - Vim 不接受换行作为输入

linux - 3>&1 是否意味着 4>&3 5>&3 等?

bash - 在 bash 中将 stderr 复制到另一个文件时重定向 stdout 和 stderr

bash - 为什么 tee 无法写入标准输出?

ruby - 如何忽略参数化 Ruby 系统调用的输出

linux - Upstart 脚本需要在/tmp 挂载并可写后运行

ruby-on-rails - 如何让crontab成功启动WEBrick

bash - 如何在 2 个子进程之间创建匿名管道并知道它们的 pids(而不使用文件/命名管道)?

mysql - 使用 bash 将图像 blob 从 mysql 下载到本地计算机?