如何在 EOF 中使用 grep 输出?

How to use grep output in EOF?

我是新来的学习者,我是 运行 具有以下脚本的程序:

./Multiwfn >HF-Dr.out << EOF
HF.fchk
3
21
2
2
grep 'Global surface minimum:' HF-ESP.out | awk '{print ,,,,,}'
EXIT
EOF

这个 grep 的输出是这样的:

0.043532 -0.032964 1.960094 0.043532 -0.032964 1.960094

我想在脚本中使用 grep 的输出而不是输入,即我想要这样的脚本:

./Multiwfn >HF-Dr.out << EOF
HF.fchk
3
21
2
2
0.043532  -0.032964   1.960094  0.043532  -0.032964   1.960094
EXIT
EOF

有什么方法可以隐藏(使不可执行)程序中的 grep 输入并只使用它的输出吗?先感谢您。

我不明白你问题的 'make non-executable' 部分。据我了解,您希望它在提供给 ./Multiwfn.

之前执行

有几种解决方法:

1) PesaThe 的评论:

./Multiwfn >HF-Dr.out << EOF
HF.fchk
3
21
2
2
$(grep 'Global surface minimum:' HF-ESP.out | awk '{print ,,,,,}')
EXIT
EOF

2) 在管道中创建输入:

(echo -e "HF.fchk\n3\n21\n2\n2;grep 'Global surface minimum:' HF-ESP.out | awk '{print ,,,,,}';echo EXIT) | ./Multiwfn >HF-Dr.out

3) 使用中间文件:

cat > file <<EOF
HF.fchk
3
21
2
2
EOF
grep 'Global surface minimum:' HF-ESP.out | awk '{print ,,,,,}' >> file
echo EXIT >> file
./Multiwfn < file >HF-Dr.out
rm file

我相信还有更多方法,但这应该会让您走上正轨。