我需要通过Putty在系统上执行大约3000个单独的命令。我这样做是通过复制~100个命令并将它们粘贴到putty SSH会话中。它有效,但问题是Putty不会连续处理它们并且输出会出现乱码。
有没有办法让Putty处理每个命令,等待返回然后处理下一个命令? Windows命令提示符执行此操作,我认为有一种方法可以使用Putty。
是的,我知道我可以把它放在一个bash脚本中,但是由于我无法控制的情况,这必须使用SSH来完成,并且可以在我们去处理时进行监控。
答案 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提示符。我不知道它是否会直接进入终端。