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

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

4

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
)
Лайков: +2
войдите, чтобы ставить лайки
4
  • Опубликовано: 10.03.2019

Комментарии

XAnder
10.03.2019
18:43
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
Часто проще в одну строку это сделать:
printf '%s\n' 'Это многострочный текстовый файл?' 'Да!' '' 'Ура!' > myfile.txt
deburger
Активный пользователь
Активный
10.03.2019
21:57
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийXAnderРодительский комментарий
+1
войдите, чтобы ставить лайки
Согласен.
Даже сходу не придумаю где бы способ из поста мне мог бы пригодиться
Dont
23.06.2020
11:10
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийdeburgerРодительский комментарий
+1
войдите, чтобы ставить лайки
Встречал, как в инструкциях так создавали файлы.
В принципе, понятно, что можно и в vi вставлять, но в этом случае копипастишь - и сразу есть файл.
[аноним]
23.09.2020
11:57
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
> Вот пример, как это работает:
> $ cat > myfile.txt < Hello World!

В этом примере ошибка. Должно быть:

cat > myfile.txt <<ENDOFFILE
Hello World!
...
ENDOFFILE

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

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила