【问题标题】:Error not store in variable in shell script? [duplicate]错误未存储在 shell 脚本中的变量中? [复制]
【发布时间】:2016-10-23 19:08:59
【问题描述】:

我有命令

store=`stat /some/path`
echo ${store}>>file.txt

然后我将变量结果回显到一个文件中

有时文件不存在,我收到stat: cannot stat xxxx的错误

但是,当发生此错误时,它会回显到标准输出,而不是存储在我的变量中。我什至希望打印出错误。我怎样才能捕捉到相同的内容?

【问题讨论】:

  • 您的代码有多个问题;我可能会建议使用shellcheck.net 并获得一些提示...
  • 实际上不是到标准输出,不——它会到 stderr 而不是你的文件。
  • 顺便说一句,你用store=$(stat /some/path); echo ${store} >>file.txt 完成了你用stat /some/path >>file.txt 无法完成的事情(如果你也想重定向stderr,后者用2>&1

标签: bash shell


【解决方案1】:

你没有。

您没有“捕获”我的意思的错误消息。相反,您检查文件是否存在之前执行所有这些操作:

my_path="/some/path"
if [ -f "$my_path" ]; then
    stat "$my_path" >> file.txt
fi

应该注意这里有一个竞争条件:文件可以在检查和stat 命令之间被删除。发生这种情况的可能性很小,但仍有可能发生。

【讨论】:

  • 需要更多报价。如果 OP 想要将他们的 stderr 重定向到一个文件(根据描述,听起来该文件是供人工审查的),那么为什么不告诉他们该怎么做呢?
  • 另外,建议全大写变量名称是错误的形式。请参阅pubs.opengroup.org/onlinepubs/009695399/basedefs/…——该命名空间是为对 shell 或操作系统有意义的变量保留的;应用程序定义的名称应至少包含一个小写字母以避免潜在的冲突,因为 shell 变量将覆盖任何同名环境变量。
  • ...re: "more quotes" -- [ -f "$my_path" ]stat "$my_path" -- 否则,如果文件名包含空格或 glob,则可以在传递给 @987654326 之前对其进行修改@(在前一种情况下)或stat(在后一种情况下)。
  • 如果目标是检查,那么if ! stat "$my_path"; then : "failure case here"; fi 将是一种检索数据或失败并检索它在原子操作中失败的知识的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2017-06-13
  • 2011-08-02
相关资源
最近更新 更多