【问题标题】:Redirecting bash output to a path stored in a variable [duplicate]将bash输出重定向到存储在变量中的路径[重复]
【发布时间】:2015-07-29 17:31:02
【问题描述】:

我正在尝试将我的输出重定向到一个文件,该文件的路径存储在一个变量中,但我无法让它工作。

LOG_TEST="~/AVDS/logs/${HOSTNAME}_testlog.log"

echo "foo" >> ~/AVDS/logs/${HOSTNAME}_testlog.log
echo "bar" >> $LOG_TEST

“foo”行可以正常工作,但“bar”行返回错误:

./testarea.sh: line 9: ~/AVDS/logs/tvpc-office_testlog.log: No such file or directory

我在这里做错了什么?

【问题讨论】:

  • 两个最佳实践说明,顺便说一下——脚本的本地变量(与影响 shell 本身或系统环境变量配置的内置变量相反)应该至少有一个小写字符;参见pubs.opengroup.org/onlinepubs/009695399/basedefs/… 的第四段,记住shell 变量和环境变量共享一个命名空间。其次,考虑引用你的扩展:>>"$log_test" vs >>$log_test;这样,即使名称包含空格,您的命令也会起作用。
  • 另外,如果您在脚本中多次使用>>$log_test 运行命令,则每个命令都会重新打开输出文件一次——与仅打开一次并重用文件相比效率非常低描述符。
  • 例如,您可以将exec 3>"$log_test" 放在脚本顶部一次,然后当您想要some_command 的输出时,请使用重定向,例如some_command >&3;这样,整个脚本中只重用了一个文件句柄。
  • 很高兴知道,谢谢!
  • @CharlesDuffy 如果脚本被中断,它是否仍会将所有输出写入文件中?

标签: linux bash shell ubuntu


【解决方案1】:

波浪号扩展仅在不加引号时发生。

养成在脚本中使用$HOME而不是~的习惯。

【讨论】:

  • 啊!绝对不是我认为问题出在哪里。谢谢!
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2012-05-06
  • 2021-11-04
  • 2019-10-11
  • 2015-03-10
相关资源
最近更新 更多