循环内部" heredoc"在shell脚本中

时间:2016-08-05 04:05:26

标签: bash shell loops eval heredoc

我需要在具有参数化值的交互式程序/实用程序中执行一系列命令。有没有办法循环heredoc?如下所示..不确定eval是否可以提供任何帮助。下面的示例似乎不起作用,因为交互式似乎无法识别系统命令。

#!/bin/sh
list="OBJECT1 OBJECT2 OBJECT3"
utilityExecutable << EOF
for i in $list ; do
utilityCommand $i
done
EOF

3 个答案:

答案 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