Здесь Документ для взаимодействия с VI - PullRequest
0 голосов
/ 02 апреля 2020

Я просто пытался выяснить EOF и вот документы. В Интернете я прочитал что-то, что показалось мне классной идеей, которую я мог бы расширить. Предполагается создать текстовый файл и добавить к нему текст, используя документ здесь. Синтаксис следующий:

#!/bin/sh
filename=test.txt
vim $filename <<EndOfCommands
i
This file was created automatically from
a shell script.
^[
ZZ
EndOfCommands

Теперь, к сожалению, я получаю сообщение об ошибке:

./EOF.sh 
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...

Vim: Finished.

Кто-нибудь может помочь исправить эту ошибку? Также я предполагаю, что ^ [означает нажатие кнопки выхода?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

vi и vim предназначены для интерактивного использования в терминале, а не в сценарии.

Используя вместо этого ed, который может с радостью принимать входные данные от стандартных источников ввода всех типов:

#!/bin/sh
filename=test.txt
ed -s "$filename" <<EndOfCommands
i
This file was created automatically from
a shell script.
.
w
EndOfCommands

(В режиме вставки строка с одним периодом указывает конец конца ввод и возвращается в командный режим, вроде как escape в vi(m).)

Использование ex - еще одна опция; в системах с установленным vim это часто не является v реальной версией.

1 голос
/ 02 апреля 2020

С vim:

filename="test.txt"
vim -c ":wq! $filename" - << EOF
This file was created automatically from
a shell script.
EOF

См .: man vim

...