2011-12-23 2 views
2

Я пытаюсь запустить команду adduser из perl.perl, системная функция и запустить внешнюю команду

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

Когда я выполнил выше, я получил следующий вывод:

[[email protected] /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); 

, что хорошо работает .. почему не массив?

ответ

6
my @test=('/usr/sbin/useradd', 
"-c 'Fred'", 
  1. -c и Fred разные аргументы, поэтому являются -d и /vol2/home/DMZ/fred ...

  2. При использовании формы массива, вы не должны бежать/цитата. (Именно поэтому форма массива безопаснее - вы не должны обрабатывать побеги оболочки!)

Таким образом, это должно быть:

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

Спасибо, так просто)))) –

+1

@ АнтонШевцов Если бы это ответили на ваш вопрос, вы должны щелкнуть галочку слева, чтобы отметить ее как «принятую». – TLP

Смежные вопросы