我正在尝试使用bash中的cat生成一个文件,在bash中,我已经运行了一个脚本,我保存到变量中然后将在cat中使用。要运行脚本并将输出保存到变量,我使用了以下内容:
declare RESULT=$(./script.pl 5 5 5)
接下来,我将展示使用变量RESULT的cat文件的摘录。
cat> input.in<<EOF
bla bla
echo $RESULT
EOF
运行bash后得到的是变量RESULT的正确输出。但是,文件开头有字回显(如下所示)。这是有问题的,因为我正在尝试自动化代码,并添加单词echo会破坏代码。
echo K_POINTS crystal
64
0.00000000 0.00000000 0.00000000 1.562500e-02
0.00000000 0.00000000 0.25000000 1.562500e-02
0.00000000 0.00000000 0.50000000 1.562500e-02
你能告诉我,问题是什么?非常感谢!
答案 0 :(得分:2)
此处的文档不会将内容作为命令运行,只会扩展const sleep = timeout => new Promise(resolve => setTimeout(() => resolve(), timeout));
const myPosts = [1,2,3];
const fetchPosts = async () => {
for (let post_id of myPosts) {
await sleep(1000); // simulate fetch post
console.log('post:', post_id);
}
console.log('done!');
};
fetchPosts();
等值。
$RESULT
如果你想真正得到一个命令的输出,你可以使用cat> input.in<<EOF
bla bla
$RESULT
EOF
但显然这对于$(mycommand myarg)
来说毫无意义
答案 1 :(得分:1)
也许我没有正确地阅读此内容(如果是这样道歉),但看起来您希望将heredoc作为脚本运行。它不是。它只是创建并输入到input.in和字符串&#39; echo&#39;包含在该输出中。
尝试删除字符串&#39; echo&#39;来自heredoc(我假设你的perl输出以令牌K_POINTS开头)。
即:
declare RESULT=$(./script.pl 5 5 5)
cat> input.in<<EOF
bla bla
$RESULT
EOF