我使用的是CentOS 6.7
我希望通过vi打开test.txt并插入文本"hihi“,然后保存并退出vi。
#! /bin/bash
vi test.txt << 'END'
i
hihi
press ESC
w
q
END像这样的结果
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.我怎么才能修好它?
发布于 2016-06-02 06:12:26
创建或修改文本文件的方法有很多,从cat到sed、从awk到ed。不过,我会假设,您有一个很好的理由想要使用vi。
尝试以下命令:
echo $'ihihi\E:x\n' | vi test.txt在操作中,这看起来像是:
$ echo $'ihihi\E:x\n' | vi test.txt
Vim: Warning: Input is not from a terminal
$ cat test.txt
hihi我发现这种方法是脆弱的:如果vi遇到错误情况,就不会看到任何消息。
它是如何工作的
我们需要让vi看到转义字符。有很多方法可以做到这一点。我选择使用bash的$'...'字符串,因为它允许将转义输入为一个简单的两个字符串:\E。我们使用的步骤是:
i引入了插入模式。hihi输入缓冲区。\E,退出插入模式。:x\n退出并保存。发布于 2016-06-02 06:16:01
您不需要在这么简单的事情上使用vi。您可以使用echo。例如:
echo "hihi" > test.txt如果你真的想做更复杂的事情,发布更多的细节。
发布于 2016-06-02 06:32:02
从bash调用vim:
vim test.txt +$'i\nhihi' +w +q您可能还想查看"ed“。这是一个编辑器,具有类似于vi的命令,但实际上它是从脚本中调用的。
https://stackoverflow.com/questions/37583736
复制相似问题