Рассмотрим один интересный трюк в командной строке Linux, который позволяет создать многострочный текстовый файл, не прибегая к помощи текстовых редакторов.
Создаем многострочный файл
Воспользуемся следующей командой:
После того, как вы выполнили эту команду, появится приглашение ко вводу строки. Введи строку и нажмите Enter. Затем можно ввести еще одну строку и так далее. Когда вы закончите ввод строк, введите слово ENDOFFILE и нажмите Enter.
В результате будет создан файл myfile.txt, содержащий те строки, которые вы вводили, кроме последней строки со словом ENDOFFILE.
Вот пример, как это работает:
$ cat > myfile.txt < Hello World!
> Это многострочный текстовый файл?
> Да!
>
> Ура!
> https://pingvinus.ru
> ENDOFFILE
$ cat myfile.txt
Hello World!
Это многострочный текстовый файл?
Да!
Ура!
https://pingvinus.ru
Почему это работает? 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
)
Комментарии
18:43
printf '%s\n' 'Это многострочный текстовый файл?' 'Да!' '' 'Ура!' > myfile.txt
21:57
Даже сходу не придумаю где бы способ из поста мне мог бы пригодиться
11:10
В принципе, понятно, что можно и в vi вставлять, но в этом случае копипастишь - и сразу есть файл.
11:57
> $ cat > myfile.txt < Hello World!
В этом примере ошибка. Должно быть:
cat > myfile.txt <<ENDOFFILE
Hello World!
...
ENDOFFILE