Я использую webmin и пытаюсь изменить некоторые настройки в файле. У меня возникают проблемы, если человек использует какие-то странные символы, которые могут сбить с толку sed или Perl, используя следующий код:
&execute_command("sed -i 's/^$Pref.*\$/$Pref \"$in{$Pref}\"/g' $DIR/pserver.prefs.cache");
Где execute_command - это функция webmin для запуска специального системного вызова. $pref
- это имя предпочтения, такое как «SERVERNAME», «OPTION2» и т. Д., А $in{Pref}
будет параметром, который я хочу установить для PREF. Например вот типичный pserver.prefs
:
SERVERNAME "Test Name"
OWNERPASSWORD "Hd8sdH&3"
Поэтому, если мы хотим изменить имя_сервера на Tes "t # & ^" @ '"@@ & и OWNERPASSWORD на * @ (&'" @ $ "(') 29 тогда они будут переданы как $in{Pref}
. Какой самый простой способ избежать переменных $in{}
, чтобы они могли нормально работать с sed, или, что еще лучше, как я могу преобразовать свою команду sed строго Perl-команде, чтобы не было ошибок?
Обновление:
Круто, теперь я просто пытаюсь заставить его работать, и я получаю эту ошибку:
**/bin/sh: -c: line 0: unexpected EOF while looking >for matching `"' /bin/sh: -c: line 1: syntax error: unexpected end of file**
Это не работает:
my $Pref = "&*())(*&'''''^%$#@!";
&execute_command("perl -pi -e 's/^SERVERNAME.*\$/SERVERNAME \"\Q$Pref\E\"/g' $DIR/pserver.prefs");
Это делает:
my $Pref = "&*())(*&^%$#@!";
&execute_command("perl -pi -e 's/^SERVERNAME.*\$/SERVERNAME \"\Q$Pref\E\"/g' $DIR/pserver.prefs");