bash - 使用exec vi时出错

标签 bash shell scripting vi heredoc

#!/bin/bash

if [ $# -ne 1 ]
then
   echo "USAGE:vitest filename"
else

FILENAME=$1

exec vi $FILENAME <<EOF
i
Line 1.
Line 2.
^[
ZZ
EOF

fi

exit 0

我正在尝试使用此处的文档和命令通过 Exec vi 输入第 1 行和第 2 行。

运行脚本时,它会给出以下内容:

Vim(?):Warning: Input is not from a terminal
Vim: Error reading input, exiting...

Press ENTER or type command to continueVim: Finished.
Vim: Error reading input, exiting...

Vim: Finished.

最佳答案

您希望以 ex 模式启动 vi,并对脚本进行一些细微的更改。

vi -e "$FILENAME" <<EOF
i
Line 1.
Line 2.
.
wq
EOF

exec 几乎肯定是不必要的,特别是因为 vi 后面有一个 exit 命令。 exec 用于用给定的命令替换当前脚本;仅仅执行命令并不需要它。


UNIX 文本编辑器简史:

  • ed 是最初的编辑器,设计用于电传打字机而不是视频终端。
  • exed 的扩展版本,旨在利用视频终端。
  • vi 是一个为 ex 提供全屏视觉模式的编辑器,与 ed 采用的面向行的界面形成鲜明对比和

关于bash - 使用exec vi时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39738758/

相关文章:

linux - 运行 "$ ls -la | script.sh"之类的 shell 脚本有什么用?

linux - 忽略空行并执行 sdiff

c - 使用 "*"作为函数 main() 的参数

linux - 在 linux shell 命令中替换输出文件扩展名

windows - 将 Windows 批处理文件变量设置为星期几

bash - 如何将 && 与我自己的函数一起使用?

json - jq 迭代和条件

bash - 剥离管道输出的第一部分

shell - $ 的含义? shell 脚本中的(美元问号)

scripting - 为 Telnet session 创建脚本?