我有一个类似的脚本:
for k in {1..100..1}
do
cat << EOF > script${k}.sh
do some things
cat << EOF > somefile
text
EOF
do some things
EOF
done
所以,简而言之,我想要100个看起来像这样的脚本:
do some things
cat << EOF > somefile
text
EOF
do some things
问题在于,当我运行它时,Bash将第一个EOF与第三个EOF关联起来并停止写入并开始尝试运行下一个命令。
我该如何解决这个问题?
提前致谢!
编辑:我纠正了下面亚伦指出的错字。另外,我将扩展我原来的问题。按照Aaron的指示,我使用END作为第一个和最后一个EOF。它工作正常,但我仍然有一些麻烦。更具体,我的代码如下所示:for k in {1..100..1}
do
cat << END > script${k}.sh
mkdir folder${k}
cd folder${k}
cat << EOF > somefile
text
EOF
for j in {1..80..1}
cat << EOF > program${j}
text
EOF
执行一些东西
END
done
我猜你看到了麻烦。现在代码工作得很好。问题在于变量。 script${k}
中END之间的$ {k}未被相应的数字替换!
感谢所有帮助: - )
答案 0 :(得分:2)
EOF
可以是在heredoc末尾找到的任何令牌,因此您可以在外部heredoc上使用另一个令牌:
for k in {1..100..1}
do
cat << END > script${1}.sh
do some things
cat << EOF > somefile
text
EOF
do some things
END
done
一些补充说明:
你没有使用$k
,所以你基本上会覆盖同一个文件100次。您的意思是script${k}.sh
而不是script${1}.sh
?
创建相同脚本的100个版本似乎毫无用处,即使脚本的行为取决于其名称。难道你不能将参数传递给一个独特的脚本吗?