ssh – 如何防止脚本吞噬所有标准输入?

我有一个脚本从循环中的管道读取并在循环中运行expect脚本和普通的 shell脚本.两个脚本都将ssh运行到另一台服务器以获取一段数据.例如:
cat /tmp/file |
while read a b c d
do
   s=`expect-script server1 $b`
   c=`ssh $b normal-script`
   echo $s $c
done

即使/ tmp / file中有许多行,脚本在处理完第一行后也会退出.我怀疑期望脚本吞噬了所有stdin,所以当它返回时,没有什么可读的.我怎么能避免这个?我不希望我调用的任何脚本从主脚本的stdin中读取.

cat /tmp/file |
while read a b c d
do
    {
        s=`expect-script server1 $b`
        c=`ssh $b normal-script`
        echo $s $c
    } < /dev/null
done

{command …}语法允许您将重定向或管道应用于一系列命令.

我还会注意到你的例子中不需要猫.你可以这样做:

while read a b c d
do
    ...
done < /tmp/file

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...