在递归ssh命令中引用bash和perl

Håk*_*and 5 ssh bash perl

我正在编写一个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脚本的引用存在一些问题.

cho*_*oba 4

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)