Следующая команда работает для меня из командной строки (cmd) в Windows 7 на WAMP .
d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
Вы можете избежать бесполезного использования cat
и лучше обрабатывать несоответствующие кавычки следующим образом:
$ read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
Если вы не заключаете переменную в кавычки, когда вы повторяете ее, символы новой строки потерянный. Цитирование сохраняет их:
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Если вы хотите использовать отступы для удобства чтения в исходном коде, используйте тире после минус. Отступы должны выполняться только с использованием табуляции (без пробелов).
$ read -r -d '' VAR <<-'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Если вместо этого вы хотите сохранить табуляции в содержимом результирующей переменной, вам необходимо удалить табуляцию из IFS
. Маркер терминала для этого документа ( EOF
) не должен иметь отступ.
$ IFS='' read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Вкладки можно вставить в командную строку, нажав Ctrl - V Tab . Если вы используете редактор, в зависимости от того, какой,
VAR=<<END
abc
END
не работает, потому что вы перенаправляете stdin на то, что его не волнует, а именно назначение
export A=`cat <<END
sdfsdf
sdfsdf
sdfsfds
END
` ; echo $A
работает, но там есть обратный тик, который может помешать вам используя это. Кроме того, вам действительно следует избегать использования обратных кавычек, лучше использовать нотацию подстановки команд $ (..)
.
export A=$(cat <<END
sdfsdf
sdfsdf
sdfsfds
END
) ; echo $A
Используйте $ () для назначения вывода cat
в вашу переменную следующим образом:
VAR=$(cat <<'END_HEREDOC'
abc'asdf"
$(dont-execute-this)
foo"bar"''
END_HEREDOC
)
# this will echo variable with new lines intact
echo "$VAR"
# this will echo variable without new lines (changed to space character)
echo $VAR
Убедитесь, что начало END_HEREDOC разделено одинарными кавычками.
Обратите внимание, что конечный разделитель heredoc END_HEREDOC
должен находиться в строке только (следовательно, окончание скобка на следующей строке).
Благодарю @ephemient
за ответ.
$TEST="ok"
read MYTEXT <<EOT
this bash trick
should preserve
newlines $TEST
long live perl
EOT
echo -e $MYTEXT