我试图将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"