Linux 将bash输出重定向到存储在变量中的路径

Linux 将bash输出重定向到存储在变量中的路径,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我试图将输出重定向到一个文件,该文件的路径存储在一个变量中,但我无法使其工作 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_tes

我试图将输出重定向到一个文件,该文件的路径存储在一个变量中,但我无法使其工作

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

我在这里做错了什么?

波浪式展开仅在未引用时发生


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

只有在未引用时才会进行波浪式展开


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

啊!绝对不是我想的问题所在。谢谢啊!!绝对不是我想的问题所在。谢谢顺便提一下,两个最佳实践注释——脚本的本地变量(与影响shell本身配置或系统环境变量的内置变量相反)应该至少有一个小写字符;请参阅的第四段,记住shell变量和环境变量共享一个名称空间。其次,考虑引用您的扩展:<代码> >“$LogyTest<”/COD> VS <代码> > $LogyTest;这样,即使名称中包含空格,您的命令也可以工作。此外,如果您在脚本中多次使用
>$log\u test
运行命令,则每个命令都会重新打开一次输出文件,这与只打开一次并重用文件描述符相比效率非常低。例如,您可以将
exec 3>放入“$log\u test”
在脚本顶部执行一次,然后每当需要从
某个_命令
输出时,通过重定向(如
某个_命令>&3
)执行此操作;这样,整个脚本中只重用了一个文件句柄。很高兴知道这一点,谢谢@CharlesDuffy如果脚本被中断,它还会将所有输出写到文件中吗?顺便说一句,两个最佳实践注释——脚本的局部变量(与影响shell本身配置或系统环境变量的内置变量相反)应该至少有一个小写字符;请参阅的第四段,记住shell变量和环境变量共享一个名称空间。其次,考虑引用您的扩展:<代码> >“$LogyTest<”/COD> VS <代码> > $LogyTest;这样,即使名称中包含空格,您的命令也可以工作。此外,如果您在脚本中多次使用
>$log\u test
运行命令,则每个命令都会重新打开一次输出文件,这与只打开一次并重用文件描述符相比效率非常低。例如,您可以将
exec 3>放入“$log\u test”
在脚本顶部执行一次,然后每当需要从
某个_命令
输出时,通过重定向(如
某个_命令>&3
)执行此操作;这样,整个脚本中只重用了一个文件句柄。很高兴知道这一点,谢谢@CharlesDuffy如果脚本被中断,它还会将所有输出写到文件中吗?