Трюк в командной строке - Как создать многострочный файл. Linux статьи

Трюк в командной строке — Как создать многострочный файл

2

Heredoc

Рассмотрим один интересный трюк в командной строке Linux, который позволяет создать многострочный текстовый файл, не прибегая к помощи текстовых редакторов.

Создаем многострочный файл

Воспользуемся следующей командой:

cat > myfile.txt <<ENDOFFILE

После того, как вы выполнили эту команду, появится приглашение ко вводу строки. Введи строку и нажмите Enter. Затем можно ввести еще одну строку и так далее. Когда вы закончите ввод строк, введите слово ENDOFFILE и нажмите Enter.

В результате будет создан файл myfile.txt, содержащий те строки, которые вы вводили, кроме последней строки со словом ENDOFFILE.

Вот пример, как это работает:

$ cat > myfile.txt < Hello World!
> Это многострочный текстовый файл?
> Да!
> 
> Ура!
> https://pingvinus.ru
> ENDOFFILE

$ cat myfile.txt 
Hello World!
Это многострочный текстовый файл?
Да!

Ура!
https://pingvinus.ru

Трюк в командной строке Linux. Heredoc

Почему это работает? Heredoc!

Команда cat > myfile.txt направляет поток стандартного ввода (то есть то, что мы вводим с клавиатуры) в файл myfile.txt
Запись <<ENDOFFILE является вариацией так называемого heredoc-формата в Bash. heredoc дословно можно перевести — «здесь документ». Это специальная конструкция, которая начинается с символов <<, за которыми вводится строка, которая обозначает конец ввода.

Мы использовали запись <<ENDOFFILE, и когда мы вводили содержимое файла и ввели строку ENDOFFILE, то ввод завершился.

Вместо ENDOFFILE можно написать любое другое слово, которое будет использоваться, как конец ввода. Обычно используют слово EOF.

Можно записать команду следующим образом:

cat > myfile.txt <<EOF

Или так:

cat <<EOF > myfile.txt

На самом деле heredoc обычно применяется не для создания многострочных файлов, а очень часто используется в Bash скриптах. Например, чтобы создать переменную, содержащую многострочный текст:

SQLREQ=$(cat <<EOF
SELECT id, text FROM content
WHERE id=123
EOF
)
Войдите, чтобы ставить лайкимне нравится
Лайков: +1
войдите, чтобы ставить лайки
2

Комментарии

XAnder
10.03.2019, 18:43
Постоянная ссылка на комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: +1
войдите, чтобы ставить лайки
Часто проще в одну строку это сделать:
printf '%s\n' 'Это многострочный текстовый файл?' 'Да!' '' 'Ура!' > myfile.txt
deburgerАктивный
10.03.2019, 21:57
Постоянная ссылка на комментарийРодительский комментарий
Войдите, чтобы ставить лайкимне нравится
Лайков: 0
войдите, чтобы ставить лайки
Согласен.
Даже сходу не придумаю где бы способ из поста мне мог бы пригодиться

Написать комментарий

Ваше имя:
Текст комментария: