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

时间:2011-12-23 04:19:00

标签: linux 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);

工作正常..为什么不是数组?

1 个答案:

答案 0 :(得分:6)

my @test=('/usr/sbin/useradd',
"-c 'Fred'",
  1. -cFred是不同的参数,因此-d/vol2/home/DMZ/fred ...

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

  3. 所以,它应该是:

    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');