2015-12-31 2 views
0

Я работаю над скриптом bash, который автоматически загружает phpMyAdmin и извлекает его. Я хотел бы добавить еще один шаг к этому сценарию установщика.Обновление phpMyAdmin blowfish_secret через скрипт оболочки bash в linux

Copy config.sample.inc.php в config.inc.php и обновление строки этого файла со случайным Blowfish секретном:

$ CFG [ 'blowfish_secret'] = '';/* ВЫ ДОЛЖНЫ ЗАПОЛНИТЬ ЭТО ДЛЯ АВТОМОБИЛЯ COOKIE! */

Итак, это то, что у меня есть, я попробовал:

#!/bin/bash 

wget -O phpMyAdmin-4.5.3.1-english.zip https://files.phpmyadmin.net/phpMyAdmin/4.5.3.1/phpMyAdmin-4.5.3.1-english.zip; 
unzip phpMyAdmin-4.5.3.1-english.zip >/dev/null 2>/dev/null; 
cd phpMyAdmin-4.5.3.1-english; 
mv * ..; 
cd ..; 
rm -rf phpMyAdmin-4.5.3.1-english; 
rm -rf phpMyAdmin-4.5.3.1-english.zip; 
randomBlowfishSecret=`openssl rand -base64 32`; 
cat config.sample.inc.php | sed -e "s/cfg['blowfish_secret'] = ''/cfg['blowfish_secret'] = '$randomBlowfishSecret'/" > config.inc.php 

При выполнении этого сценария, PhpMyAdmin загружается и извлекается и файл копируется, однако это не по всей видимости, установка randomBlowfishSecret - $cfg['blowfish_secret'].

Любые идеи?

+1

Вы, вероятно, хотите, чтобы избежать '[]' в регулярном выражении: 'CFG \ [ 'Blowfish ...', чтобы сказать СЭД, что они не классы символов. –

+0

Являются ли те единственные персонажи, которым я должен бежать? – Latheesan

+0

Я бы так сказал: https://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html –

ответ

3

Несколько моментов:

  • Вы не должны закончить свои линии с ; – новой строки имеет тот же эффект.
  • Если вы хотите перенаправить как стандартный вывод и стандартный поток ошибок, вы можете использовать &>/dev/null вместо >/dev/null 2>/dev/null, но в случае unzip, вы можете просто использовать unzip -q подавить вывод (или даже -qq, но -q уже молчала для меня).
  • Вместо

    cd phpMyAdmin-4.5.3.1-english; 
    mv * ..; 
    cd ..; 
    

    вы можете просто использовать mv phpMyAdmin-4.5.3.1-english/* .

  • Есть два файла, начинающиеся с ., которые не перемещаются с помощью команды (если у вас есть набор опций dotglob оболочки), так что вы должны переместить их по отдельности:

    mv phpMyAdmin-4.5.3.1-english/.*.yml . 
    
  • phpMyAdmin-4.5.3.1-english теперь пуст, поэтому йо u может удалить его с rmdir вместо rm -rf (что сообщило бы вам, что оно еще не пусто).
  • phpMyAdmin-4.5.3.1-english.zip - всего лишь файл; нет необходимости рекурсивно удалять его, rm -f достаточно.
  • sed может быть улучшена тремя способами:

    • No need for cat. cat file | sed "s/x/y/g" > output (заменить все x в file с y, сэкономить до output) эквивалентно sed "s/x/y/g" file > output, но последний не порождает дополнительную подоболочку.
    • Регулярное выражение

      s/cfg['blowfish_secret'] = ''/ 
      

      интерпретируется как «cfg, и любой символ из списка между [ и ]», но вы хотите буквальным [ и ], поэтому они должны быть экранированы: \[ и \]. В заменяющей строке их не нужно избегать.

    • Пароль, генерируемый openssl rand, может содержать косые черты, которые смешивают sed. Вы можете использовать другой разделитель для sed, например "s|x|y|" вместо "s/x/y/".

Все эти косметические, за исключением последних двух SED пуля точек: те могут сломать сценарий. Ну и недостающие скрытые файлы тоже могут раздражать.

Подчищены версия, которая работает для меня:

#!/bin/bash 

wget -O phpMyAdmin-4.5.3.1-english.zip https://files.phpmyadmin.net/phpMyAdmin/4.5.3.1/phpMyAdmin-4.5.3.1-english.zip 
unzip -q phpMyAdmin-4.5.3.1-english.zip 
mv phpMyAdmin-4.5.3.1-english/* . 
mv phpMyAdmin-4.5.3.1-english/.*.yml . 
rmdir phpMyAdmin-4.5.3.1-english 
rm -f phpMyAdmin-4.5.3.1-english.zip 
randomBlowfishSecret=`openssl rand -base64 32`; 
sed -e "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$randomBlowfishSecret'|" config.sample.inc.php > config.inc.php 
Смежные вопросы