为什么我的shell脚本会退出?

时间:2014-11-12 08:24:07

标签: linux bash shell sh

我有一个机器列表,其中每台机器都运行一项服务。我试图弄清楚哪些服务记录了特定的字符串。所以我写了一个shell脚本登录到服务器并grep查看日志:

while read line
do
  echo ====
  echo $line
  ssh root@$line "grep 'my test string' /abc/*/logs/stderr"
  echo $line
  echo ==========
done

我是通过sh script.sh < /tmp/machine-list运行的 / tmp / machine-list每行有一个主机名。

但是在登录到一台机器并回显第二个===后,脚本退出。

2 个答案:

答案 0 :(得分:1)

尝试这样做,我怀疑是shell扩展:

while read line
do
  echo ====
  echo $line
  ssh root@$line <<'EOF'
  grep 'my test string' /abc/*/logs/stderr
EOF
  echo $line
  echo ==========
done

答案 1 :(得分:0)

我不确定,但我认为当{s}会话结束时,while打开的文件描述符将被关闭。 以下是作品。

hosts=$(cat /tmp/machine-list)

for line in $hosts; do
    echo ====
    echo $line
    ssh root@$line "grep 'my test string' /abc/*/logs/stderr"
    echo $line
    echo ==========
done

更新

我的猜测很接近 https://unix.stackexchange.com/questions/107800/using-while-loop-to-ssh-to-multiple-servers
bash script to ssh multiple servers in a Loop and issue commands