perl,系统函数并运行外部命令

我正在尝试从Perl启动adduser命令。

 use strict; use warnings; my @test=('/usr/sbin/useradd', "-c 'Fred'", '-d /vol2/home/DMZ/f.kals', '-g 3335','-u 11002', "-k '/dev/null'", '-m', '-p "$1$kKNKMa8O$g03oj6YeeZbO2i3NMSoyT1"', 'fred'); system (@test); 

当我执行上述,我得到了以下输出:

 [ay@pandora /vol2]$ sudo ./test.pl useradd: invalid home directory ' /vol2/home/DMZ/fred' 

为什么?

如果我不使用数组

 my $command="/foor/bar/useradd -m -g 1234 -u 6789 -param2 -param3 username" system ($command); 

那工作OK ..为什么不是数组?

 my @test=('/usr/sbin/useradd', "-c 'Fred'", 
  1. -cFred是不同的论点,所以-d/vol2/home/DMZ/fred

  2. 当你使用数组形式时,你不必转义/引用。 (这就是为什么数组形式更安全 – 您不必处理shell转义!)

所以,它应该是:

 my @test=('/usr/sbin/useradd', '-c', 'Fred', '-d', '/vol2/home/DMZ/f.kals', '-g', '3335', '-u', '11002', '-k', '/dev/null', '-m', '-p', '$1$kKNKMa8O$g03oj6YeeZbO2i3NMSoyT1', 'fred');