Loop inside “heredoc” in shell scripting

后端 未结 3 1038
伪装坚强ぢ
伪装坚强ぢ 2020-12-19 10:25

I need to execute series of commands inside an interactive program/utility with parameterized values. Is there a way to loop inside heredoc ? Like below .. Not sure if

相关标签:
3条回答
  • 2020-12-19 11:09

    Yes, this is tricky and can be confusing! You have to modify your codes as follow.

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

    This is because heredoc uses its own variables, which are completely separate from the shell. When you are inside heredoc, you have to use and modify heredoc's own variables. So the \$ is needed to reference heredoc's own variables instead of shell variables when inside heredoc.

    0 讨论(0)
  • 2020-12-19 11:12
    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
    
    0 讨论(0)
  • 2020-12-19 11:22

    Instead of passing a here-document to utilityExecutable, the equivalent is to pipe the required text to it. You can create the desired text using echo statements in a for-loop, and pipe the entire loop output to utilityExecutable:

    #!/bin/sh
    
    list="OBJECT1 OBJECT2 OBJECT3"
    
    for i in $list; do
        echo "utilityCommand $i"
    done | utilityExecutable
    
    0 讨论(0)
提交回复
热议问题