一些管道后,linux期望+ ssh命令输出丢失

时间:2014-10-07 05:03:50

标签: shell expect

我想通过ssh执行一些命令(例如,pwd)。

ssh root@jump pwd

我用期望包装它,所以它变成" e"命令,它运作良好。

./e jump

但管道后输出丢失,无法显示" pwd"命令

cat list.txt | xargs -I xx ./e xx

这是e脚本

[root@jump tmp]# cat ./e
 expect -d -c '
        spawn   ssh root@'$1' pwd
         expect "*assword:" {
          send "r41\r"
          sleep 1
        }

        sleep 3
 '

**虽然管道之后的ssh没问题,但回声xx仅用于添加更多管道**

echo xx | ssh root@jump pwd

2 个答案:

答案 0 :(得分:0)

使用;分隔复合语句中的命令

echo xx | ssh root@jump; pwd

答案 1 :(得分:0)

我不确定这里的echo xx重定向。但是,在期望代码中,只需添加一个expect语句以等待pwd执行

expect -c '
        spawn ssh dinesh@myremotemachine pwd
        expect "*word:" {
                send "root\r"

                #The reason for adding '/' here is to wait for the 
                #directory to get printed and since the directory
                #will have the char '/' such as 

                #/users/dinesh/pgms/expect 

                expect "/"

                sleep 1
        }
        sleep 3
        puts "leaving"
'

我在远程计算机上对此进行了测试,您可以根据预期的字符自定义期望字符。如果这也没有帮助,请提供错误输出。