我正在编写一个perl脚本,用ssh登录到服务器,并在服务器上执行一些shell命令.问题是只有首先登录到另一台服务器才能访问服务器.(我使用ssh密钥进行无密码登录).
以下bash脚本正常工作,并说明了问题:
#! /bin/bash
server1="login.uib.no"
server2="cipr-cluster01"
ssh "$server1" "ssh $server2 \"echo \\\"\\\$HOSTNAME\\\"\""
Run Code Online (Sandbox Code Playgroud)
它会在屏幕上输出正确的主机名:cipr-cluster01.但是,当试图在Perl中做同样的事情时:
my $server1="login.uib.no";
my $server2="cipr-cluster01";
print qx/ssh "$server1" "ssh $server2 \"echo \\\"\\\$HOSTNAME\\\"\""/;
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:login.uib.no.所以我猜,perl脚本的引用存在一些问题.
qx作用类似于双引号。你必须多加一些反斜杠:
print qx/ssh "$server1" "ssh $server2 \"echo \\\\"\\\$HOSTNAME\\\\"\""/;
Run Code Online (Sandbox Code Playgroud)
使用单引号可能会大大简化命令:
print qx/ssh "$server1" 'ssh $server2 "echo \\\$HOSTNAME"'/;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |