将多个命令粘贴到Putty - 串行处理?

时间:2014-02-19 17:26:51

标签: putty

我需要通过Putty在系统上执行大约3000个单独的命令。我这样做是通过复制~100个命令并将它们粘贴到putty SSH会话中。它有效,但问题是Putty不会连续处理它们并且输出会出现乱码。

有没有办法让Putty处理每个命令,等待返回然后处理下一个命令? Windows命令提示符执行此操作,我认为有一种方法可以使用Putty。

是的,我知道我可以把它放在一个bash脚本中,但是由于我无法控制的情况,这必须使用SSH来完成,并且可以在我们去处理时进行监控。

6 个答案:

答案 0 :(得分:8)

我一直这样做。将您的命令放在( )块中,它将作为子shell运行,完全连续的所有内容。我正在运行Windows PuTTY并连接到Linux和AIX服务器。试试吧。

(
Command1
Command2
Command3
)

在实践中,我可能会在Notepad ++或其他任何内容中运行大量100个我想要运行的语句。所以我将它们复制到剪贴板,然后复制到PuTTY:

(   
 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

答案 1 :(得分:2)

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

这应该与远程服务器看起来完全相同(我假设它正在进行日志记录),同时让你比复制粘贴命令块有更多的控制权。

答案 2 :(得分:1)

我不确定为什么你不能使用Plink,但你可以使用Notepad ++制作一个批处理文件。

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

Notepad ++: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

答案 3 :(得分: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

答案 4 :(得分:-1)

几年前我有类似的要求,我编写了连接SSH并执行命令的代码。

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

如果您需要更多详细信息,请与我们联系。

答案 5 :(得分:-1)

在我的腻子中,我只是粘贴到它上面就可以了。

打开记事本
输入您的命令列表
突出显示记事本
ctr + c(或右击,复制)

点击你的腻子窗口
右键单击一次,进入您键入命令的位置

您应该会在插入框中看到所有命令

按Enter键

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