2016-02-19 2 views
0

Я использую следующую конструкцию для установки многострочной строки в оболочке bash. Но это всегда возвращает false, который не работает, когда я устанавливаю set -e. Как я могу заставить это вернуться к успеху?Как сделать read -d return true

#!/bin/bash 
set -x 
set -e 

read -d '' QUERY <<EOF 
UPDATE table_name SET 
field1 = 'value', 
field2 = 'value' 
WHERE id = 1; 
EOF 
mysql table_name -e "$QUERY" 

ответ

2

Если вы не ответите на исходный вопрос, это поможет решить вашу проблему. Рассмотрим использование замещения и, например, cat

QUERY=$(cat <<EOM 
test 
test2 
EOM 
) 

mysql table_name -e "$QUERY" 

Пожалуйста, имейте в виду вопросы безопасности, если вы читаете эти значения из unsanitized ввода.

+0

@codefx, вы не приняли этот ответ. Не могли бы вы добавить комментарий, объясняющий, почему это решение когда-то работало и теперь больше не отвечает на заданный вами вопрос? Это будет образовательный, не только для меня, но и для других, которые ищут подобное решение. –