用户名作为SSH中的变量与Perl

时间:2016-06-01 07:53:26

标签: perl variables ssh

在我的Perl脚本中我想通过

连接到机器
my $result = `ssh $user@machine`;

其中$ user是当前计算机上的用户名。然而,这显然不起作用,因为Perl将整个字符串识别为一个变量。那么,在通过SSH连接时,有没有其他方法可以在用户名中使用变量?

我已经看到有一个SSH Perl模块,但是如果有另一个解决方案,我想避免使用其他模块。

提前谢谢!

5 个答案:

答案 0 :(得分:3)

Escape sigil Luke:

my $result = `ssh $user\@machine`;

没有数组@machine,不是吗?

反引号是Quote-like Operators。 (我建议使用通用qx{}版本而不是常规反引号。)它会插入(除非您使用qx'')内容,因此它会将@machine插入为machine数组的内容。它通过$"变量的内容来区分成员,该变量默认为空格。如果您没有定义@machine变量且没有use strict;,则会将其插值为空字符串,如果未提供use warnings;-W参数,则不会发出警告。

答案 1 :(得分:3)

  

Perl将整个字符串识别为一个变量。

不,那不是问题。问题是除了将$user解析为变量之外,它还将@machine解析为变量。

这只是逃避特殊字符的问题。

my $result = `ssh $user\@machine`;

如果问题确实是你需要传达变量的结尾,你可以使用curlies。

my $count = 4;
my $item = 'book';
print("$count $items\n");     # XXX
print("$count ${item}s\n");   # 4 books

答案 2 :(得分:0)

尝试: 我的$ result = ssh ${user}\@machine;

如果您有多个变量,可以使用{}来表示它们不同 例如:$ {user1} _ $ {user2}

答案 3 :(得分:0)

这应该能解决Alex:

`ssh "${user}"@"${machine}"`;

答案 4 :(得分:-1)

你需要在字符串中转义“@”,作为一个数组,并在变量user周围使用双引号。

尝试:

my $result = `ssh "$user"\@machine`;