【发布时间】: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 如果脚本被中断,它是否仍会将所有输出写入文件中?