Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash while循环在第一行之后中断_Bash_While Loop - Fatal编程技术网

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

bash while循环在第一行之后中断,bash,while-loop,Bash,While Loop,我有一个带有while循环的简单脚本,但无法理解为什么它在$vault_列表变量的第一行之后中断: #!/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

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

#!/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"
#/bin/bash
tech_login=“$1”
vault_列表=$(docker exec-i tmgnt_vault_1 vault列表机密/${tech_login}-终端| sed 1,2d)
当IFS=读取-r终端时
做
echo“线路为$terminal”
key_values=$(docker exec-i tmgnt_vault_1 vault读取机密/${tech_login}-terminals/$terminals)

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

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

key\u values=$(docker exec-i tmgnt\u vault\u 1 vault read secret/${tech\u login}-terminals/$terminal在@choroba的提示下,我找到了$key\u值的正确语法:

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

key\u values=$(docker exec-i tmgnt\u vault\u 1 vault read secret/${tech\u login}-terminals/$terminal希望这能帮助其他人。

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; 

通过使用指示ssh从/dev/null获取stdin来解决问题,希望这能帮助其他人。
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; 

通过使用Does
docker exec-i tmgnt_vault_1 vault read secret/${tech_login}指示ssh从/dev/null获取stdin来解决此问题-terminals/$terminal
如果您单独运行它,它会工作吗?是的,如果我单独启动它,它会返回值docker,或者您在其中运行的命令会吃掉其余的stdin,因此在下一次迭代中没有任何内容可读。是的,这很有帮助!呃:-P我们如何阻止它吃掉其余的stdin?docker exec-I tmgnt\u vault\u 1 vault读取机密吗/${tech_login}-terminals/$terminals
如果单独运行它会起作用吗?是的,如果我单独启动它,它会返回值Docker,或者你在其中运行的命令会吃掉其余的stdin,因此在下一次迭代中没有任何内容可以读取。是的,这很有帮助!呃:-P我们如何阻止它吃掉其余的stdin?