Вы можете указать rpmbuild, где используются ваши файлы --define '_builddir <Your_Root>'
Вам не нужно запускать его с другой учетной записью, хотя я думаю, что это хорошая практика. Надеюсь, это полезно. Эран.
Я был бы склонен создать массив из sed
команд, используя параметр -e
, чтобы сообщить sed
что это все команды, (а не одна команда и несколько имен файлов ). Кроме того, переменная не раскрывается в одинарных -кавычках, поэтому вместо этого используйте двойные -кавычки. (Примечание. :Я предполагаю, что двойные -кавычки в строках замены должны были исправить это, но это не так. Если на самом деле в файл нужно добавить двойные кавычки -, используйте вместо них \"
.)
Вот так:
sedCommands=()
if [[ -n "$var1" ]]; then
sedCommands+=(-e "s/^;*\max_execution_time =.*/max_execution_time = ${var1}/")
fi
if [[ -n "$var2" ]]; then
sedCommands+=(-e "s/^;*\memory_limit =.*/memory_limit = ${var2}/")
fi
if [[ -n "$var3" ]]; then
sedCommands+=(-e "s/^;*\max_file_size =.*/max_file_size = ${var3}/")
fi
if [[ -n "$var4" ]]; then
sedCommands+=(-e "s/^;*\max_post_size =.*/max_post_size = ${var4}/")
fi
if [[ ${#sedCommands[@]} -gt 0 ]]; then
sed -i "${sedCommands[@]}" /user/php8.0-fpm/php.ini
else
echo "No changes made." >&2
fi
Вы уже согласились с другим ответом, но если ваша первоначальная идея заключалась в том, чтобы одна sed
команда выполняла фильтрацию (без необходимости условий оболочки ), вы могли бы использовать простой прием, например:
sed -i "/^${var1}/!s/^;*\(max_execution_time = \).*/\1${var1}/
/^${var2}/!s/^;*\(memory_limit = \).*/\1${var2}/
/^${var3}/!s/^;*\(max_file_size = \).*/\1${var3}/
/^${var4}/!s/^;*\(max_post_size = \).*/\1${var4}/" /user/php8.0-fpm/php.ini
Как видите, я добавил инвертированный адрес к каждой s
замещающей команде. /^${var1}/
будет соответствовать, только если var1
пусто (или состоит из меньшего или равного количества точек с запятой, чем )в строке. !
инвертирует совпадение, поэтому команда s
выполняется только в том случае, если var
содержит значение.