<分区>
a.txt
的内容:ba.txt
当我输入 cat a.txt | xargs vi
, vi 打开ba.txt
一切正常...
但是当我退出vi的时候,我发现我的bash不正常了。。我看不到我输入的指令。我输入了ls
。我看不到它,但是当我按下 enter 时,结果显示(以一种奇怪的方式..)...(输入 ls
后,我输入 ll
. 有一些汉字,请忽略它).. 而bash是这样的:
有人能解释一下吗?
<分区>
a.txt
的内容:ba.txt
当我输入 cat a.txt | xargs vi
, vi 打开ba.txt
一切正常...
但是当我退出vi的时候,我发现我的bash不正常了。。我看不到我输入的指令。我输入了ls
。我看不到它,但是当我按下 enter 时,结果显示(以一种奇怪的方式..)...(输入 ls
后,我输入 ll
. 有一些汉字,请忽略它).. 而bash是这样的:
有人能解释一下吗?
最佳答案
您的 bash
shell 没有被破坏。只是您的终端处于某种不良状态-因为您向它发送了奇怪的字节-(终端具有某种状态-并且终端仿真器和内核管理该状态,该状态在进程错误更改后仍然存在。参见例如stty(1) 命令、关于 /dev/tty
的 tty(4) 手册页和 isatty(3) 函数)。键入(可能是盲目地)reset
命令(或 stty sane
)以重置终端。
大多数终端响应ANSI escape codes (有关丑陋的细节,请阅读与配置这些转义码相关的 termcap(5))。发送任意 - 或随机 - 字节的命令可能会发送一些转义序列,这可能会损坏您的终端的行为。
但是,您对 vi
的使用可能是错误的。对于可编程版本,请考虑使用 sed(1)或 ed(1) ;或者 emacs --batch
....
如果你只想编辑 a.txt
中的行命名的文件 ba.txt
你可以运行:
vi $(cat a.txt)
或者更好的是,使用标准的 EDITOR
变量(参见 environ(7) )
$EDITOR $(cat a.txt)
另请阅读 Advanced Bash Scripting Guide .您可以使用反引号,请参阅 this answer ,但我不建议使用它们。
由于历史原因,终端模拟 tty -s(点击那个链接,它解释了很多),这是非常复杂和神秘的物理设备。你可能还太小,没见过他们(在博物馆外)。在 1970 年代,我十几岁的时候就从事过一些工作。这是一种令人难以置信的有趣和嘈杂 - 一种机电通信打字机。
老天,我老了,今天没人知道打字机到底是什么....
关于linux - 为什么 "cat a.txt | xargs vi"会破坏 bash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17717623/