试图弄清楚如何用双引号内的单引号单引号.这就是我想要做的......
从perl开始,我想运行一个系统命令...... - 将ssh写入远程机器 - 执行'uptime'然后从中取出最后一个字段(平均负载持续15分钟).
\#\!/usr/bin/env perl
my $cmd = "ssh othermachine 'uptime | awk '{print $NF}'' > local_file.dat";
system($cmd);
Run Code Online (Sandbox Code Playgroud)
当然这不会运行......
% ./try.pl
Missing }.
%
Run Code Online (Sandbox Code Playgroud)
失踪 "}" ???看起来它将$ NF}解释为var?我试图逃避{}字符而没有运气.我试图逃避$,没有运气.我在}之前尝试了一个空格,没有运气但是不同的msg(未定义的变量).
c-shell BTW并提前感谢!
你希望以下是ssh第二个参数:
uptime | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
为此,您只需在其周围放置单引号即可.但这不起作用,因为它包含单引号.
您想构建一个包含的字符串$NF,但是您按如下方式执行:
"...$NF..."
Run Code Online (Sandbox Code Playgroud)
这将把(不存在的)Perl变量的值$NF放在字符串中.
一步一步做.
静态的:
远程命令:
uptime | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)本地命令:
ssh othermachine 'uptime | awk '\''{print $NF}'\''' >local_file.dat
Run Code Online (Sandbox Code Playgroud)字符串字面量:
my $local_cmd = q{ssh othermachine 'uptime | awk '\''{print $NF}'\''' >local_file.dat}
Run Code Online (Sandbox Code Playgroud)动态:
use String::ShellQuote qw( shell_quote );
my $remote_cmd = q{uptime | awk '{print $NF}'};
my $local_cmd = shell_quote('ssh', 'othermachine', $remote_cmd) . ' >local_file.dat';
Run Code Online (Sandbox Code Playgroud)