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