【发布时间】:2014-09-17 10:05:09
【问题描述】:
III 正在编写一个 Perl 脚本,该脚本需要通过 SSH 连接到多个远程服务器以执行一些日志文件的 gzip 压缩。在下一行中,我不断收到此错误,并且正在努力确定导致此错误的原因。我得到的错误是;
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `cd /appdata/log/cdmbl/logs/; echo cd /appdata/log/cdmbl/logs/; find . -type f ( -iname '*' ! -iname '*.gz' ) -mmin +1440 ;; exit 0'
当然,你可以从错误中看出,我要写的那行是:
my $id = qx{ssh -q $cur_host "cd $log_path; echo cd $log_path; find . -type f \( -iname '*' ! -iname '*.gz' \) -mmin +1440 \;; exit 0"};
我是否在这里忽略了导致意外令牌“(”问题的问题 收到了吗?
注意:我从 find 中删除了 -exec,以便查看是否可以先解决此问题。
谢谢。
【问题讨论】:
-
您可能会发现
File::Find很有用。 Perl 中的核心模块。也许Net::SSH。 -
很遗憾,这些是生产服务器,所以我没有能力添加模块。因此使用上述方法。
-
这个东西的基本调试:改变你的 Perl 脚本来打印行而不是执行它。自己运行该行(ssh 命令)。它有效吗? SSH 进入远程服务器。运行要在其中运行的命令部分。它有效吗?如果这没有给您答案,请编辑您的问题以报告您所做的事情。
-
好的...所以,只是为了清楚起见。 SSH 在我实现它的方式上运行良好。我不知道您是否认为我需要帮助。
-
错误的命令引用。试试Net::OpenSSH(和Net::OpenSSH::Parallel),它们可以为你做报价。
标签: perl find syntax-error qx