SSH调用时,变量形式while循环不工作



我遇到了一个问题,我正在比较两个文件(alert.txt和env.txt)并基于共同值,我正在根据匹配条目从env.txt中提取完整的行数据。我正在读取这些值到while循环,然后调用如下函数。SSH调用不工作,start_admin中的while循环也不工作

#!/bin/bash
start_admin()
{
ssh -n -f $user@$host "sh -c 'cd $domain; ./script.sh > /dev/null 2>&1'"
while !(netstat -na | grep -E $host:$port|grep -E LISTEN) 2>/dev/null
sleep 30
do
echo "waiting"
done
echo "started"
}
grep -Ff alert.txt env.txt | (while IFS=" " read -r r1 r2 r3 r4 r5
do
user=$r2
host=$r3
domain=$r4
port=$r5
done
start_admin $user $host $domain $port
)
and contents of alert.txt is:
env2
env3
and that of env.txt is :
env1 user1 host1 /app/domain1/ port1
env2 user2 host2 /app/domain2/ port2
env3 user3 host3 /app/domain3/ port3

我可以用多个if else循环解决这个问题,但这不是一个理想的解决方案,请引导我在正确的方向上缺少什么?

  1. 此处使用join而不是grep以避免误报
  2. 因为你的while read循环在你运行start_admin之前完成,你只启动它一次(done应该在start_admin之后)
  3. start_admin中,不要使用$user, $host等,使用$1, $2(或者使用它们,但在调用函数时不要将它们作为参数传递)

我不确定你到底想达到什么目的,但这里已经有一个修改过的版本了。

#!/bin/bash
start_admin()
{
  sanitized_domain=${domain//'"'/'"'}
  ssh -n -f "$user@$host" "sh -c 'cd "$sanitized_domain"; ./script.sh >/dev/null 2>&1'"
  while ! netstat -na | grep -q " $host:$port .*LISTEN"; do
    echo waiting
    sleep 30
  done
  echo started
}
join alert.txt env.txt | while IFS=' ' read -r env user host domain port; do
  start_admin
done
)

相关内容

  • 没有找到相关文章

最新更新