2015-11-14 3 views
0

Я пишу программу, которая будет использовать sqlmap, чтобы выполнить простую проверку, а затем использовать шаблоны регулярных выражений, чтобы найти критические ошибок в моей базе данных.Использование переменной для извлечения имени пользователя и его разрывы в двух

Проблема в том, что я сохраняю вывод sqlmap в текстовом файле. Если я ставлю этот файл в корневом каталоге, это хорошо, но если я пытаюсь сохранить его в домашнем каталоге вошедшего в профиле, то я получаю эту ошибку

sh1: cannot creat /home/user 
sh2: /Desktop/results.txt not found 

Вот код, который вызывает эта ошибка

$u = `id -u -n`; 
my $com = `sqlmap -m $ARGV[0] >> /home/$u/Desktop/results.txt --batch`; 

Я не понимаю, почему переменная $u разбивает путь /home/$u/Desktop/results.txt на две отдельные строки.

+1

выглядит как новая строка, попробуйте запустить $ u через chomp – ahmad

+0

Вы правы. Вопрос, если вы не возражаете: каждый раз, когда мы запускаем командные команды через PERL, получаем команду с новой строкой? Большое вам спасибо за ответ. –

+0

Нет, только если команда выводит новую строку. – choroba

ответ

7

Perl имеет функцию, чтобы получить имя пользователя, нет необходимости вызывать внешнюю команду:

my $u = getpwuid $<; 

Обратите внимание, что ничего не гарантирует дом пользователя будет находиться в /home/$u (см дома суперпользователя: /root). File::HomeDir может вам помочь. Или используйте команду ~/ для команды оболочки.

+0

В чем разница между использованием функции или вызовом партии для нее? Я ищу техническую точку зрения, так как я знаю разницу между ними на практике. –

+4

@BrunoFrancisco: функция, как правило, быстрее, код чище, и вы не сталкиваетесь с проблемами с новостями в неожиданных местах. – choroba

+0

Спасибо за ваше время, сэр. –