2016-01-24 117 views
1

我试图从Linux上获取在Windows机器上运行的进程列表,但是当我在脚本中执行此操作时,我没有得到任何输出。如果我手动使用telnet并使用pslist命令,我会得到完整的进程列表,但不会在我的脚本中。如何从bash获取telnet命令的输出?

这里是bash脚本(减去的变量):

(echo open ${host} 
sleep 1 
echo ${user} 
sleep 3 
echo ${pass} 
sleep 1 
echo pslist 
sleep 2 
) | telnet 

,我只是用bash pslist.sh调用它,并且输出是类似的东西:

telnet> Trying ip_address... 
Connected to ip_address. 
Escape character is '^]'. 
Welcome to Microsoft Telnet Service 

login: my_loginmy_passwordpslistConnection closed by foreign host. 

我在做什么错?

+1

尝试终止每个'echo'与\ r字符,就像这样:'回声-e “$ {}用户\ r” – nsilent22

+0

echo有许多可移植性问题,不应该与选项标志一起使用。请考虑使用printf:'printf'name:%s \ n'“$ name”'。 http://wiki.bash-hackers.org/commands/builtin/echo | http://cfajohnson.com/shell/cus-faq.html#Q0b | http://www.in-ulm.de/~mascheck/various/echo+printf –

+0

我会建议使用'expect'来编写telnet脚本。您可以在这里了解并下载它:http://expect.sourceforge.net/有一个示例telnet脚本在此处使用它:http://stackoverflow.com/questions/7789710/expect-script-to-automate-telnet -login –

回答

2

终止每个echo与\ r字符,像这样:echo -e "${user}\r"

+1

为了便于携带,'printf'绝对优于'echo',带或不带'-e',并且有或没有在一些方言中支持而在其他方言中不支持的转义码。使用'printf',所有这些都得到了正确的标准化。 – tripleee

3

telnet对脚本来说是非常棘手的。如果在命令之间添加更长的sleep,则可能会更经常地获得成功。

更好的方法是切换到正确脚本的客户端,即, netcat(又名nc)。更好的办法是在你的Windows机器上安装一个SSH服务器(或许为了安全起见,只能从你的网络中访问它),并用无密码验证进行设置。然后,你可以简单地ssh [email protected] pslist