我正在尝试从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);
工作正常..为什么不是数组?
答案 0 :(得分:6)
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');