我需要在具有参数化值的交互式程序/实用程序中执行一系列命令。有没有办法循环heredoc?如下所示..不确定eval
是否可以提供任何帮助。下面的示例似乎不起作用,因为交互式似乎无法识别系统命令。
#!/bin/sh
list="OBJECT1 OBJECT2 OBJECT3"
utilityExecutable << EOF
for i in $list ; do
utilityCommand $i
done
EOF
答案 0 :(得分:2)
而不是将here-document传递给utilityExecutable
,
相当于将所需的文本传递给它。您可以使用for循环中的echo
语句创建所需的文本,并将整个循环输出传递给utilityExecutable
:
#!/bin/sh
list="OBJECT1 OBJECT2 OBJECT3"
for i in $list; do
echo "utilityCommand $i"
done | utilityExecutable
答案 1 :(得分:0)
是的,这很棘手,可能令人困惑!您必须修改您的代码,如下所示。
#!/bin/sh
list="OBJECT1 OBJECT2 OBJECT3"
utilityExecutable << EOF
list="$list"
for i in \$list ; do
utilityCommand \$i
done
EOF
这是因为heredoc使用自己的变量,这些变量与shell完全分开。当你在heredoc里面时,你必须使用和修改heredoc自己的变量。因此,当在heredoc中时,需要\ $引用heredoc自己的变量而不是shell变量。
答案 2 :(得分:0)
commandxyz -noenv<<EOF
echo "INFO - Inside eof"
t_files=("${p_files[@]}")
#copy array
#echo \${t_files[*]}
#all elements from array
#echo \${#t_files[@]}
#array length
for i in \${t_files[@]} ; do
echo -e \$i;
do other stuff \$i;
done
cat $patch_file
git apply $patch_file
EOF