代码之家  ›  专栏  ›  技术社区  ›  Vasiliy Stepulo

当循环在第一行后中断时猛击

  •  0
  • Vasiliy Stepulo  · 技术社区  · 6 年前

    我有一个带有while循环的简单脚本,但无法理解为什么它在$vault\u list变量的第一行之后中断:

    #!/bin/bash
    
    tech_login="$1"
    vault_list=$(docker exec -i tmgnt_vault_1 vault list secret/${tech_login}-terminals | sed 1,2d)
    
    while IFS= read -r terminal
    do
        echo "line is $terminal"
        key_values=$(docker exec -i tmgnt_vault_1 vault read secret/${tech_login}-terminals/$terminal )
    
    
    done <<< "$vault_list"
    

    如果我从while循环中删除$key\u值,它将返回echo“line is$terminal”中的所有值。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Vasiliy Stepulo    6 年前

    通过@choroba的提示,我找到了$key\u值的正确语法:

    key_values=$(docker exec -i tmgnt_vault_1 vault read secret/${tech_login}-terminals/$terminal <<<$terminal)
    

        2
  •  2
  •   gaoithe    5 年前

    希望这能帮助其他人。
    ssh可能是正在使用stdin的命令。

    e、 g.while循环中的ssh导致循环在第一次迭代后退出。

    LIST="cid1 10.10.0.1 host1
    cid2 10.10.0.2 host1
    cid3 10.10.0.3 host2"
    
    # this while loop exits after first iteration
    # ssh has eaten rest of stdin
    echo "$LIST" |while read -r cid cip chost; do
        echo $cid;
        PSINFO=$(ssh $chost docker exec -i $cid "ps -e -orss=,pid=,args=,cmd=" |grep java );
        echo PSINFO=$PSINFO; 
    done; 
    

    </偏差/空 :

    # this while loop keeps on running
    # ssh directed to take stdin from /dev/null
    echo "$LIST" |while read -r cid cip chost; do
        echo $cid;
        PSINFO=$(ssh $chost docker exec -i $cid "ps -e -orss=,pid=,args=,cmd=" </dev/null |grep java );
        echo PSINFO=$PSINFO; 
    done;