这是使用 rsync 命令的正确方法吗?

Is that proper way to use rsync command?

$var = "/nfs/sc/disks/darshils/scripts/";

这里$var是一个字符串

system 'rsync -av $var/.*pl /scripts/';

系统命令用于 perl lang 我可以执行任何 unix 命令

这样可以在rsync命令中使用$var吗? 或者在 rsync 命令中使用 $var 的任何其他方式?

没有,但是有一种使用引号的正确方法。

在 Perl 中,字符串 $var 插入双引号(和双引号结构 qq{...})内,但在单引号(和 q{...})内按字面意思处理。所以您只想将 system 调用更改为

system "rsync -av $var/.*pl /scripts/";

您可以使 system 通话更安全一些。

system有两种形式。字符串形式给出 system 一个参数。 shell 然后解释该字符串以确定要做什么。当您插入一个变量时,这可能不是您想要的。什么是 $var 类似于 ; rm -rf; 结束命令并允许您开始一个新命令。

列表形式更安全一些。命令后的 None 个参数由 shell 特殊处理。如果在 $var 中有一个 shell 元字符,它就是这种形式的字面自我:

 system 'rsync', '-av', "$var/.*pl", '/scripts/';

Perl 还具有 "taint-checking" 标记来自程序外部的数据(用户输入、文件等)。受污染的数据是病毒式的;将它与未受污染的数据一起使用,您会得到更多受污染的数据。当您尝试使用受污染的数据在您的程序之外执行某些操作时(例如 system),您会收到一个错误。

查看 perlsec. I also have a chapter on this in Mastering Perl。祝你好运!

尝试使用 Perl File::Rsync 模块。