sed в FreeBSD: неправильный флаг "FreeBSD" в команде замещения: '}' "" - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть этот скрипт:

DB_ARRAY=(NAME USER PASSWD SERVER)

for i in ${DB_ARRAY[@]}; do
    VAR="DB_$i"
    declare $VAR=$(sed -rn "/_${VAR}_/ { s/.*'_${VAR}_', '(\w+)'\);/\1/p }" ${PRESTASHOP_PATH}/config/settings.inc.php | tail -1)
done

mysqldump -u"${DB_USER}" -p"${DB_PASSWD}"-h"${DB_SERVER}" "${DB_NAME}" > ${DATABASE_PATH}

Я в основном использую его для получения переменных базы данных из конфигурации Prestashop для создания дампа базы данных.Он работает с Linux.

Однако сегодня я получил это, когда пробовал на новой системе:

sed: 1: "/_DB_NAME_/ { s/.*'_DB_ ...": bad flag in substitute command: '}'
sed: 1: "/_DB_USER_/ { s/.*'_DB_ ...": bad flag in substitute command: '}'
sed: 1: "/_DB_PASSWD_/ { s/.*'_D ...": bad flag in substitute command: '}'
sed: 1: "/_DB_SERVER_/ { s/.*'_D ...": bad flag in substitute command: '}'

Оказывается, система, на которой я пробовал это FreeBSD.

  1. Возможно ли сделать его совместимым с FreeBSD?Как?
  2. В чем разница между FreeBSD sed и Linux sed, ответственным за эту проблему?

Добавлено: Это пример settings.inc.phpфайл, я разбираюсь с sed:

define('_DB_SERVER_', 'mariadb');
define('_DB_NAME_', 'mydatabase');
define('_DB_USER_', 'prestashop');
define('_DB_PASSWD_', 'prestashop');
define('_DB_PREFIX_', 'ps_');
define('_MYSQL_ENGINE_', 'InnoDB');
define('_PS_CACHING_SYSTEM_', 'CacheFs');
define('_PS_CACHE_ENABLED_', '0');
define('_COOKIE_KEY_', 'xyz');
define('_COOKIE_IV_', 'xyz');
define('_PS_CREATION_DATE_', '2015-04-30');
define('_PS_VERSION_', '1.6.1.0');
define('_RIJNDAEL_KEY_', 'xyz');
define('_RIJNDAEL_IV_', 'xyz');
define('_PS_DIRECTORY_', '/../../');
...