tee命令不能使用变量中的文件名



我试图将bash脚本的内容输出到文件中,但是当我将文件名放入变量时,它不起作用。但是如果我硬编码相同的文件名,它可以工作。

I tried this

{
echo "in the script"
file='file.txt'
} | tee -a "$file"

但是我得到错误tee: : No such file or directory,我也回显"$file"然后返回file。txt,这样我就知道变量设置正确了。

{
echo "in the script"
} | tee -a "file.txt"

它创建文件并填充它没有问题。为什么我的变量在这里不起作用?

编辑:我使用括号{}来封装我的脚本,因为它是一个相当大的脚本,我想输出到一个文件。所以echo "in the script" | tee -a "$file"不能工作

这个适合我:

#!/bin/sh
file="file.txt"
echo "in the script" | tee -a "$file"

创建一个名为file.txt的文件,内容为in the script


我在这里找到答案:https://stackoverflow.com/a/42086845/1766219

我不知道为什么你有{}在你的代码。如果它们很重要,那么请更新你的问题,说明你为什么使用它们。

我相信当你使用括号对命令进行分组时,它会创建一个上下文,如果你在其中定义变量,它们将只存在于该上下文中,因此不会在管道之后传递给命令。

我的假设是错误的,根据下面的评论,这不起作用的原因是由于管道命令作为独立的子进程执行两边,因此在一边定义的变量在另一边不存在。同样在我的建议下面,你可能不想使用&&如果你不关心第一个命令的结果。

file="file.txt" && 
{
echo "in the script"
} | tee -a "$file"

最新更新