使用 exec vi 时出错
Error when using exec vi
#!/bin/bash
if [ $# -ne 1 ]
then
echo "USAGE:vitest filename"
else
FILENAME=
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.
使用 sed
如果我没理解错的话,你想在文件的开头添加两行。在这种情况下,根据赛勒斯的建议,运行:
#!/bin/bash
if [ $# -ne 1 ]
then
echo "USAGE:vitest filename"
exit 1
fi
sed -i.bak '1 s/^/line1\nline2\n/' ""
备注:
当使用shell变量时,它应该用双引号引起来,除非你想进行分词和路径扩展。这对于文件名很重要,例如,因为现在文件名包含空格很常见。
最好为 shell 变量使用小写或混合大小写名称。系统为其变量使用大写名称,您不希望不小心覆盖其中之一。
在检查参数时,if
语句应包含一个 exit
以防止脚本的其余部分在以下情况下成为 运行没有提供论点。在上面,我们添加了 exit 1
将退出代码设置为 1 以表示错误。
使用vi
让我们从这个测试文件开始:
$ cat File
some line
现在,让我们 运行 vi
然后看看文件中的内容:
$ vi -s <(echo $'iline1\nline2\n\eZZ') File
$ cat File
line1
line2
some line
以上要求 bash 或类似。
使用cat
。
$ cat file1.txt file2.txt | tee file3.txt
Line 1
Line 2
aaaa
bbbb
cccc
按照建议,ed
ed file << END
1i
line1
line2
.
wq
END
"dot" 行表示 "end of input"。
它可以写成一行,不太清晰
printf "%s\n" 1i "line1" "line2" . wq | ed file
您想以 ex
模式启动 vi
,并对脚本进行一些小的更改。
vi -e "$FILENAME" <<EOF
i
Line 1.
Line 2.
.
wq
EOF
exec
几乎肯定是不必要的,特别是因为您在 vi
之后有一个 exit
命令。 exec
用于将当前脚本替换为给定的命令;不需要简单地执行命令。
UNIX 文本编辑器简史:
ed
是最初的编辑器,设计用于使用电传打字机而不是视频终端。
ex
是 ed
的扩展版本,旨在利用视频终端。
vi
是一个为 ex
提供全屏可视化模式的编辑器,与 ed
和 ex
使用的面向行的界面形成对比。
#!/bin/bash
if [ $# -ne 1 ]
then
echo "USAGE:vitest filename"
else
FILENAME=
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.
使用 sed
如果我没理解错的话,你想在文件的开头添加两行。在这种情况下,根据赛勒斯的建议,运行:
#!/bin/bash
if [ $# -ne 1 ]
then
echo "USAGE:vitest filename"
exit 1
fi
sed -i.bak '1 s/^/line1\nline2\n/' ""
备注:
当使用shell变量时,它应该用双引号引起来,除非你想进行分词和路径扩展。这对于文件名很重要,例如,因为现在文件名包含空格很常见。
最好为 shell 变量使用小写或混合大小写名称。系统为其变量使用大写名称,您不希望不小心覆盖其中之一。
在检查参数时,
if
语句应包含一个exit
以防止脚本的其余部分在以下情况下成为 运行没有提供论点。在上面,我们添加了exit 1
将退出代码设置为 1 以表示错误。
使用vi
让我们从这个测试文件开始:
$ cat File
some line
现在,让我们 运行 vi
然后看看文件中的内容:
$ vi -s <(echo $'iline1\nline2\n\eZZ') File
$ cat File
line1
line2
some line
以上要求 bash 或类似。
使用cat
。
$ cat file1.txt file2.txt | tee file3.txt
Line 1
Line 2
aaaa
bbbb
cccc
按照建议,ed
ed file << END
1i
line1
line2
.
wq
END
"dot" 行表示 "end of input"。
它可以写成一行,不太清晰
printf "%s\n" 1i "line1" "line2" . wq | ed file
您想以 ex
模式启动 vi
,并对脚本进行一些小的更改。
vi -e "$FILENAME" <<EOF
i
Line 1.
Line 2.
.
wq
EOF
exec
几乎肯定是不必要的,特别是因为您在 vi
之后有一个 exit
命令。 exec
用于将当前脚本替换为给定的命令;不需要简单地执行命令。
UNIX 文本编辑器简史:
ed
是最初的编辑器,设计用于使用电传打字机而不是视频终端。ex
是ed
的扩展版本,旨在利用视频终端。vi
是一个为ex
提供全屏可视化模式的编辑器,与ed
和ex
使用的面向行的界面形成对比。