sSm*_*cKk 2 unix perl command backticks
我正在尝试使用通常的反引号在perl脚本中运行tail命令.
我的perl脚本中的部分如下:
$nexusTime += nexusUploadTime(`tail $log -n 5`);
Run Code Online (Sandbox Code Playgroud)
所以我试图获取此文件的最后5行,但是当perl脚本完成时我收到以下错误:
sh: line 1: -n: command not found
Run Code Online (Sandbox Code Playgroud)
即使我在命令行上运行命令它确实成功,我可以看到该特定的5行.
不知道这里发生了什么.为什么它从命令行工作,但通过perl它将无法识别-n选项.
有人有什么建议吗?
$log 有一个无关的尾随换行符,所以你正在执行
tail file.log
-n 5 # Tries to execute a program named "-n"
Run Code Online (Sandbox Code Playgroud)
固定:
chomp($log);
Run Code Online (Sandbox Code Playgroud)
请注意,如果日志$log包含shell元字符(例如空格),则会遇到问题.固定:
use String::ShellQuote qw( shell_quote );
my $tail_cmd = shell_quote('tail', '-n', '5', '--', $log);
$nexusTime += nexusUploadTime(`$tail_cmd`);
Run Code Online (Sandbox Code Playgroud)