2014-02-19 49 views
4

我有大约3000个单独的命令,我需要通过Putty在系统上执行。我通过复制〜100个命令并将它们粘贴到putty SSH会话中来做到这一点。它的工作原理,但问题是,腻子不会连续处理它们,并且输出会出现乱码。将多个命令粘贴到Putty - 串行处理?

有没有办法让腻子处理每个命令,等待一个回报,然后处理下一个? Windows命令提示符执行此操作,我认为用Putty可以这样做。

是的,我知道我可以把这个bash脚本,但由于我的控制范围之外的情况下,这必须使用SSH,并能同去进行监测记录的方式来完成。

回答

2

这里只是一个想法,Putty带有名为Plink的命令行工具。您可以在Windows机器上编写一个脚本,用Plink创建与远程服务器的连接,然后逐个解析您的命令列表并发送它们。

这应该长得一模一样到远程服务器(我假设是什么做的记录),同时让你拥有比命令复制粘贴块多一点控制。

+0

不幸的是,远程服务器没有进行日志记录。另外,我需要捕获的是每个命令的返回文本。 – user3329270

+0

那么,登录本地计算机仍然应该看到一个SSH连接。 Plink肯定会允许你捕获服务器对你正在运行的命令的响应。 – binaryatrocity

+0

如此接近,但plink的问题在于,即使在保存的会话中启用了日志记录,它也不会执行任何Putty风格的日志记录。我可以将输出重定向到日志文件(即>> c:\ temp \ log.txt),但远程服务器返回的错误不会显示在日志中,只显示成功消息。 – user3329270

0

也许你正在寻找的答案是here

这里的答案,我觉得可能是你感兴趣的副本:

// Wait for backup setting prompt 
    Repeat Until %D1% = 1 
     Activate Window: "DAYMISYS1.qdx.com - PuTTY" 
     Mouse Move Window 12, 11      <------- Moves mouse to upper left corner to activate menu options 
     Mouse Right Button Click 
     Delay 0.1 Seconds 
     Text Type: o         <------- Activates Copy All to Clipboard command 
     Delay 0.2 Seconds 
     If Clipboard Contains "or select a number to change a setting:"  <------- Look for text of prompt that I am waiting for 
     Repeat Exit          <------- If found, exit loop and continue macro 
     End If 
     Delay 1 Seconds         <------- If prompt is not found, continue loop 
    Repeat End 
+0

这可能对某些人有所帮助,但购买和安装专有软件对于大多数人来说不起作用。 –

-1

我也有类似的要求。几年前,我写的代码连接到SSH和执行命令。

有很多SSH库可用于每种编程语言(我使用Java)。您可以使用简单的几行代码连接到SSH,然后从您的文件中读取命令,并按顺序执行。你可以记录整个内容,瞧!

让我知道你是否需要更多细节。

1

我不知道为什么你不能使用的Plink,但你可以做一个批处理文件,用记事本++。

plink <hostname> -l <login_name> -pw <password> <command 1> 
plink <hostname> -l <login_name> -pw <password> <command 2> 
plink <hostname> -l <login_name> -pw <password> <command 3> 
... 
plink <hostname> -l <login_name> -pw <password> <command 3000> 

运行批处理文件:

filename.bat > log.txt 2>&1 

记事本++:http://notepad-plus-plus.org/

的Plink:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

批处理文件:http://www.robvanderwoude.com/batchfiles.php
显示&重定向输出:http://www.robvanderwoude.com/battech_redirection.php

6

我一直这样做。把你的命令放在一个()块中,它将作为一个子shell运行,完全是串行的一切。我正在运行Windows PuTTY并连接到Linux和AIX服务器。尝试一下。

(
Command1 
Command2 
Command3 
) 

在实践中,我可能会声明我想运行的许多100S的巨大的负荷,在记事本++或什么的。所以我将它们复制到剪贴板,然后在腻子:

( 
paste in your wad here 
) 

编辑:如果你要单独记录从每个语句的输出,你可能会做这样的事情:

(
Command1 > /home/jon/command1output.txt 
Command2 > /home/jon/command2output.txt 
Command3 > /home/jon/command3output.txt 
) 

或如果你只是想输出的一个大的数据流,你可以交错分隔以方便您阅读后:使用另一个变化:

(
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 
echo "[`date`] Now running Command1 ..." 
Command1 
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 
echo "[`date`] Now running Command2 ..." 
Command2 
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 
echo "[`date`] Now running Command3 ..." 
Command3 
) 

EDIT2内联函数。所有可粘贴到PuTTY中,具有完美的串行运行,记录为command1:output1,command2:output2,...,并且能够驱动SQL * Plus。

(
    function geniusMagic() { 
    echo " " 
    echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 
    date 
    echo "RUNNING COMMAND:" 
    echo " " 
    echo "$*" 
    echo " " 
    echo "OUTPUT:"  
    echo " " 
    sh -c "$*" 
    } 

    geniusMagic df -m /home 
    geniusMagic 'printf $RANDOM | sed "s/0//g"' 
    geniusMagic 'echo "select count(*) 
        FROM all_tables; 
       " | sqlplus -s scott/tiger' 
) 

输出示例:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Wed Jun 25 17:41:19 EDT 2014 
RUNNING COMMAND: 

df -m /home 

OUTPUT: 

Filesystem MB blocks  Free %Used Iused %Iused Mounted on 
/dev/hd1  1024.00 508.49 51%  3164  3% /home 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Wed Jun 25 17:41:19 EDT 2014 
RUNNING COMMAND: 

printf $RANDOM | sed "s/0//g" 

OUTPUT: 

2767 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Wed Jun 25 17:41:19 EDT 2014 
RUNNING COMMAND: 

echo "select count(*) 
        FROM all_tables; 
       " | sqlplus -s scott/tiger 

OUTPUT: 


    COUNT(*) 
---------- 
     48 
+0

这是最接近的答案,但它仍然不如简单地粘贴到Windows命令提示符那样方便。例如,在Putty中使用SQL * Plus时,这不起作用。此外,看到“command:result,command:result”而不是“command,command:result,result”会更好。 –

+0

在上面添加了EDIT2,为您提供命令:结果对,并且似乎适用于SQL * Plus。不确定你的确切的Oracle布局,比如你在SSH上的同一台服务器上的Oracle数据库? –

+0

这个答案并没有退出帮助我与我原来的问题,所以我没有奖励原来的赏金。但它只是帮助我解决了一个不同的问题,所以这次我会给你一笔奖金(在23小时内,当我被授予奖励时)。 –

-1

在腻子我有,我只是粘贴到它和它的作品。

打开记事本
键入您的命令列表
高亮记事本
CTR + C(或右键单击,复制)

点击您的腻子窗口
右键单击一次,到了你键入你的命令

您应该看到所有插入您的输入框的命令

命中进入

注意:我使用它在Linux上编译的C++程序中输入多行到cin提示符。我不知道它是否会直接进入终端。