我需要通过 PuTTY 在系统上执行大约 3000 个单独的命令。我通过复制大约 100 个命令并将它们粘贴到 PuTTY SSH 会话中来完成此操作。它可以工作,但问题是 PuTTY 不会连续处理它们,并且输出会出现乱码。
有没有办法让 PuTTY 处理每个命令,等待返回然后处理下一个命令? Windows 命令提示符可以执行此操作,我认为有一种方法可以使用 PuTTY 执行此操作。
是的,我知道我可以将其放入 Bash 脚本中,但由于我无法控制的情况,这必须使用 SSH 来完成,并以一种可以在我们进行和记录时进行监控的方式完成。
我一直这样做。将您的命令放在
(
)
块中,这会将其作为子 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
这只是一个想法,Putty 附带了一个名为 Plink 的命令行工具。您可以在 Windows 计算机上编写一个脚本,使用 Plink 创建与远程服务器的连接,然后一次解析一个命令列表并发送它们。
这对于远程服务器来说应该看起来完全相同(我认为远程服务器正在执行日志记录),同时让您比复制粘贴命令块有更多的控制权。
我不知道为什么你不能使用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
也许您正在寻找的答案就在这里。
这是我认为您可能感兴趣的答案副本:
// 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
在我的腻子中,我只需粘贴进去即可。
打开记事本
输入您的命令列表
突出显示记事本
ctr + c(或右键单击,复制)
单击腻子窗口
右键单击一次,进入您输入命令的位置
您应该看到所有命令都插入到您的输入框中
按回车键
注意:我用它在 linux 上编译的 C++ 程序的 cin 提示符中输入多行。我不知道它是否可以直接进入终端。