bash while循环在第一行之后中断

时间:2018-10-11 10:57:56

标签: bash while-loop

我有一个带while循环的简单脚本,但无法理解为什么它在第一行之后从$ vault_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_values,它将返回回显“ line is $ terminal”中的所有值。 谁能指出我,while循环有什么问题?我认为这可能是输出问题,但不确定。

2 个答案:

答案 0 :(得分:1)

在@choroba的提示下,我找到了$ key_values的正确语法:

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

我需要将$ terminal变量显式传递给docker命令,这可以通过here字符串“ <<

答案 1 :(得分:1)

希望这对其他人有帮助。
ssh可能是吃掉stdin的命令。
是给我的。

例如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; 

通过使用 指示ssh从/ dev / null中获取标准输入来解决:

# 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;