这是使用 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 模块。
$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 模块。