如何在此处文档中执行 for 循环(Linux shell 脚本)

问题描述 投票:0回答:1

我正在尝试创建一个 shell 脚本,它多次通过程序并计算一些物理参数。该程序在控制台中使用“./radex”打开,然后要求我输入一些值(例如,它询问我文件名、输出文件名、动能温度等)。它计算这些值,最后询问我是否想要继续计算(输入1)或停止(输入0)。我能够制作一个看起来像这样的脚本

#!/bin/bash
index_array=(50 60 70)
for i in ${index_array[@]}
do
./radex<<EOF
CF_all_coll.dat
Testy2.dat
200 210
$i
1
H2
100
2.73
3e12
1
0
EOF
done

这使得创建多个文件成为可能,但为了仅创建 1 个文件,我需要给出“1”而不是“0”作为最后一个输入。然而,当我这样做时,它不起作用可能是因为它再次调用 ./radex,所以有没有办法

  • 仅在循环内调用 ./radex 一次
  • 在此处文档中将某些内容“标记”为输入或不输入?因为如果我把 ./radex<
  • 以不同的方式输入内容

非常感谢任何帮助!

linux shell for-loop heredoc
1个回答
0
投票

你的意思是:

for i in "${index_array[@]}"; do
   cat <<EOF
CF_all_coll.dat
Testy2.dat
200 210
$i
1
H2
100
2.73
3e12
1
0
EOF
done | ./radex

首先生成它,查看它以进行调试,然后重定向可能会更简单。

input=$(
for i in "${index_array[@]}"; do
   cat <<EOF
CF_all_coll.dat
Testy2.dat
200 210
$i
1
H2
100
2.73
3e12
1
0
EOF
done
)
echo "$input" # Is it correct?
./radex <<<"$input"
# or echo "$input" | ./radex
© www.soinside.com 2019 - 2024. All rights reserved.