我正在尝试从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'",
-c
和Fred
是不同的论点,所以-d
和/vol2/home/DMZ/fred
…
当你使用数组形式时,你不必转义/引用。 (这就是为什么数组形式更安全 – 您不必处理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');