gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:28:47 29 4
gpt4 key购买 nike

我有一个带有 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,它会返回 echo“line is $terminal”中的所有值。谁能指出我,while 循环有什么问题?我假设这可能是输出问题,但不确定。

最佳答案

希望这对其他人有帮助。
ssh 可能是正在吃标准输入的命令。
这是给我的。

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

关于bash while 循环在第一行之后中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52758363/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com