【问题标题】:why shell variable is not assigned to be the error messages from command used in command substitution? [duplicate]为什么没有将 shell 变量指定为命令替换中使用的命令的错误消息? [复制]
【发布时间】:2021-05-22 06:30:16
【问题描述】:

我有以下几点:

a=$(grep pattern file_not_exist)
echo $a. #turns out a is empty

但我可以看到 grep 抱怨:grep: file_not_exist: No such file or directory. 为什么 grep 的错误信息没有赋值为 shell 变量 a 的值?而如果我们想要这种重定向,该怎么做呢?

我是一个壳牌新手,刚刚开始。似乎 stdout 输出分配给了 shell 变量。你能指出我描述这个的文档吗?

谢谢!

【问题讨论】:

  • 您当然可以确保 stdout stderr 最终位于同一个变量中,正如 RamanSailopal 解释的那样。您还可以通过一些努力将 stdout 和 stderr 放入不同的变量中。但你为什么想要?在脚本中,您只需要知道是否存在错误(例如,提前终止脚本),错误消息应该立即显示给用户,或者被丢弃。在这两种情况下,您都不需要在变量中使用它。
  • 顺便说一句,变量赋值在 PARAMETERS 部分的 bash 手册页中进行了描述。 REDIRECTION 部分描述了重定向。

标签: bash shell


【解决方案1】:

a 将包含返回到标准输出的命令的输出。错误将返回给 sterr,因此要获取变量中的错误,您需要将 sterr 重定向到 stout 等:

a=$(grep pattern file_not_exist 2>&1)

这里,2代表stdrr,1代表stdout。

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 2021-07-26
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多