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

问题描述 投票:0回答:5

我需要通过 PuTTY 在系统上执行大约 3000 个单独的命令。我通过复制大约 100 个命令并将它们粘贴到 PuTTY SSH 会话中来完成此操作。它可以工作,但问题是 PuTTY 不会连续处理它们,并且输出会出现乱码。

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

是的,我知道我可以将其放入 Bash 脚本中,但由于我无法控制的情况,这必须使用 SSH 来完成,并以一种可以在我们进行和记录时进行监控的方式完成。

putty
5个回答
9
投票

我一直这样做。将您的命令放在

(
)
块中,这会将其作为子 shell 运行,完美地串行运行所有内容。我正在运行 Windows PuTTY 并连接到 Linux 和 AIX 服务器。尝试一下。

(
Command1
Command2
Command3
)

在实践中,我可能会在 Notepad++ 或其他设备中运行大量的数百条语句。所以我将它们复制到剪贴板,然后在 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

2
投票

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

这对于远程服务器来说应该看起来完全相同(我认为远程服务器正在执行日志记录),同时让您比复制粘贴命令块有更多的控制权。


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/

P链接:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

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


0
投票

也许您正在寻找的答案就在这里

这是我认为您可能感兴趣的答案副本:

   // 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

-1
投票

在我的腻子中,我只需粘贴进去即可。

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

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

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

按回车键

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

© www.soinside.com 2019 - 2024. All rights reserved.