VMware: `SG_IO : bad / missing sense data` на новом виртуальном диске SCSI

Предположим - как предлагает ваша собственная командная строка - perl реализация переименовать (пример сценария, поставляемый с perl , начиная с версии 3 в 1989 г. и часто включается в качестве команды во многие ОС, иногда в виде перезаписи с расширениями, отдельными от пакета perl , например этот ), иногда называемым prename в некоторых дистрибутивах Linux, где переименовать в противном случае это имя из util-linux , вы можете использовать среду:

STRING=$characters_to_remove_inputted_by_the_user rename 's/\Q$ENV{STRING}\E//g' ./*

Выше, содержимое $ characters_to_remove_inputted_by_the_user переменная оболочки передается как значение переменной среды STRING , которую perl извлекает с помощью $ ENV {STRING} .

В качестве альтернативы вы можете использовать специальную встроенную оболочку export , чтобы эта переменная оболочки передавалась в окружение каждой выполняемой команды, включая переименование :

export characters_to_remove_inputted_by_the_user
rename 's/\Q$ENV{characters_to_remove_inputted_by_the_user}\E//g' ./*

] \ Q / \ E должны убедиться, что $ STRING обрабатывается как фиксированная строка, а не как регулярное выражение. Если вы хотите, чтобы его обрабатывали как регулярное выражение, просто:

REGEXP=$characters_to_remove_inputted_by_the_user rename 's/$ENV{REGEXP}//g' ./*

Избегайте таких вещей, как:

 переименовать «s / $ characters_to_remove_inputted_by_the_user // g»./ * 
 

Выше содержимое переменной оболочки расширяется оболочкой перед вызовом переименовать , так что это может быть уязвимостью внедрения команды, так как значение переменной будет интерпретируется как код perl (подумайте, например, о таком значении, как //; system ("reboot"); s / ).

1
25.08.2016, 11:46
0 ответов

Теги

Похожие вопросы