在shell脚本中从一个服务器移动到另一个服务器

这是场景,
$hostname
server1
我在server1中有以下脚本,
#!/bin/ksh
echo "Enter server name:"
read server

rsh -n ${server} -l mquser "/opt/hd/ca/scripts/envscripts.ksh"
qdisplay
 # script ends.
在上面的脚本中,我登录到另一个服务器,例如server2并执行脚本“envscripts.ksh”,该脚本设置了很少的别名(别名“qdisplay”)。 我能够成功登录到server1但无法使用脚本“envscripts.ksh”设置的别名。 得到以下错误,
-bash: qdisplay: command not found
有些人可以指出这里需要纠正的问题。 谢谢, 维涅什     
已邀请:
其他回复和评论是正确的。您的
rsh
命令需要在同一个调用中执行ksh脚本和后续命令。但是,我想我会提出一个额外的建议。 您似乎正在为WebSphere MQ编写自定义检测。您的方法是远程shell到WMQ服务器并执行命令以显示队列属性(可能是深度)。 编写自己的工具的目标是令人钦佩的,但是尝试将其作为远程shell进行操作并不是最佳方法。它要求您在每个MQ服务器上维护脚本库,并在某些情况下以不同语言维护这些脚本。 我建议更好的方法是使用SupportPac MO72中提供的MQSC客户端。这允许您编写一次脚本,然后从中央服务器执行它们。由于MQSC命令都是通过MQ客户端完成的,因此相同的脚本可以处理Windows,UNIX,Linux,iSeries等。 例如,您可以编写一个远程查询队列深度的脚本,并打印深度> 0的所有队列的列表。然后,您可以直接针对给定的队列管理器执行此脚本,也可以编写脚本来迭代队列管理器列表并为整个网络收集相同的报告。由于脚本都在一个中央服务器上运行,因此您不必担心
$PATH
正确,tr或grep等命令的差异,其中安装了ksh或perl等等。 十年前,当我的WMQ网络很小时,我编写了你正在处理的脚本。当网络变大时,这些平台差异让我活着,我无法保持自动化运行。当我切换到使用WMQ客户端并且只有一组脚本时,我能够以更少的时间和精力维护它。 以下脚本假定QMgr名称与主机名相同,但在大写情况下除外。您可以在命令行上传递QMgr名称,主机名,端口和通道,以使脚本在QMgr名称与主机名不匹配时有用。 #!/ usr / bin / perl -w #------------------------------------------------- ------------------------------ #mqsc.pl # #W072 SupportPac mqsc可执行文件的包装器 #通过STDIN在命令行和主机名上提供parm文件名。 #Program尝试连接到SYSTEM.AUTO.SVRCONN和端口1414上的主机名 #将parm文件重定向到mqsc。 # #预期用途是...... # #mqsc.pl parmfile.mqsc #host1 #host2 # # - 要么 - # #mqsc.pl parmfile.mqsc<节点列表 # # - 要么 - # #cat nodelist | mqsc.pl parmfile.mqsc # #------------------------------------------------- ------------------------------ 用严格; $ SIG {ALRM} = sub {die“timeout”}; $ ENV {PATH} = ~s /:$ //; 我的$ File = shift; 死“没有提供mqsc parm文件名!”除非$ File; 死“文件'$文件'不存在! n”除非-e $文件; while(){     我的@Results;     终日啃食;     如果/ ^ s * [#*] /; #允许使用#或*发表评论     S / ^ S + //; #删除前导空格     S / s + $ //; #删除尾随空格     #不接受名称中包含嵌入空格的主机     死“错误:无效的主机名'$ _' n”如果/ s /;     #Silently跳过空白行     下一个除非($ _);     我的$ QMgrName = uc($ _);     #------------------------------------------------- ---------------------------     #运行parm文件     eval {         警报(10);         @Results =`mqsc -E -l -h $ _ -p detmsg = 1,prompt =“”,width = 512 -c SYSTEM.AUTO.SVRCONN&1 | grep -v“^ MQSC结束”`;     };     if($ @){         if($ @ =〜/ timeout /){             打印“超时连接到$ _ n”;         } else {             print“连接到$ _:$! n”的意外错误;         }     }     报警(0);     if(@Results){         print join(“ t”,@ Result,“ n”);     } } 出口; parmfile.mqsc是任何有效的MQSC脚本。收集所有队列深度的一个看起来像这样: 显示QL(*)CURDEPTH     
我认为真正的问题是r(o)sh cmd只执行远程envscripts.ksh文件,然后您的脚本尝试在本地计算机上执行qdisplay。 您需要将两个命令“粘合”在一起,以便它们都可以远程执行。 根据Gilles的评论编辑(他是正确的)
rosh -n ${server} -l mquser ". /opt/hd/ca/scripts/envscripts.ksh ; qdisplay"
我希望这有帮助。 附:因为你似乎是一个新用户,如果你得到一个帮助你的答案,请记住将其标记为已接受,或者给它一个+(或 - )作为一个有用的答案     

要回复问题请先登录注册