Я гуглил этот вопрос безрезультатно. Я автоматизирую процесс сборки здесь, на работе, и все, что я пытаюсь сделать, это получить номера версий и крошечное описание сборки, которое может быть многострочным. Система, на которой это работает, - OSX 10.6.8.
Я видел все от использования CAT до обработки каждой строки по мере необходимости. Я не могу понять, что я должен использовать и почему.
попытки
read -d '' versionNotes
Приводит к искаженному вводу, если пользователь должен использовать клавишу возврата. Также нет хорошего способа завершить ввод, так как ^ D не завершает, а ^ C просто завершает процесс.
read -d 'END' versionNotes
Работает ... но все равно искажает ввод, если нужна клавиша возврата.
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
Не правильно завершает ввод (потому что я слишком поздно, чтобы найти совпадения с пустой строкой).
Ответы:
man bash
упоминает «…... »
и я согласен с тем, что стоит упомянуть -
echo "$myVar"
выглядело бы так, как было указано.источник
man stty
, узнайте, как получить текущие настройкиПопробуй это:
Без разрывов строк:
С переносами строк:
источник
-d ''
это именно то, что мне было нужно. СпасибоОбратитесь к превосходному Руководству по Bash для всех ваших потребностей сценариев Bash.
В частности, Bash FAQ содержит это под номером 1:
Как я могу прочитать файл (поток данных, переменную) построчно (и / или поле за полем)?
источник
read -r
, но как мне получить это сделать из STDIN? Я попытаться использоватьread -r
на ранних стадиях.Я решил эту проблему, работая с каждой строкой, пока не нашел пустую строку. Это работает достаточно хорошо для моей ситуации. Но если кто-то хочет добавить лучшее решение, не стесняйтесь делать это.
источник
read -r
вместо этого.Вы можете запустить редактор, как VIM, Pico ...
источник
Сначала несколько исправлений:
-e
используйте readline (так что у вас есть история bash и все функции редактирования)-d
занимает всего один символ. Например, из «END» берется «E», и всякий раз, когда пользователь пишет «E», чтение останавливается (я думаю, это не то, что вы хотите ...)Есть несколько возможностей сделать это. Я бы прочитал строку за строкой и остановился бы, когда была найдена пустая строка (хотя вы могли бы установить любое слово остановки):
источник
У вас есть несколько методов.
Один из самых простых методов:
Например:
источник
ls
!Мы используем конструкцию, использующую xargs и ctrl-d для взлома. Я не совсем доволен этим, но он, безусловно, выполняет работу по вводу многострочного пользовательского ввода и вставке его в переменную (форматирование не нарушено). (Первое и третье назначения добавляют кавычки вокруг содержимого ввода xargs.)
В качестве темы сообщения электронной почты, отправляемого по почте (через bash), мы используем напоминание тела.
источник
Смотрите: http://tldp.org/LDP/abs/html/internal.html#READR.
Используйте
read
и обратите внимание, что если вы заканчиваете строку с\
новой строки, игнорируется. Так что вы могли бы сделать:источник