首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从shell脚本启动编辑器?

如何从shell脚本启动编辑器?
EN

Stack Overflow用户
提问于 2009-11-07 04:42:08
回答 7查看 12K关注 0票数 20

我想让我的tcsh脚本启动一个编辑器(例如vi、emacs):

代码语言:javascript
复制
#!/bin/tcsh
vi my_file

这将使用my_file启动vi,但首先会显示警告"Vim: Warning: Output is not to to terminal“,并且我的按键不会出现在屏幕上。在我杀死vi之后,我的终端窗口被弄乱了(没有换行符),需要“重置”。我尝试了"emacs -nw“、"xemacs -nw”和“pico”,得到了类似的结果。"xemacs“可以工作,但会启动一个单独的窗口。我想重用相同的终端窗口。

有没有一种方法可以从脚本启动编辑器,以便它重用相同的终端窗口?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-11-07 04:48:19

我回答了我自己的问题!您必须重定向终端输入和输出:

代码语言:javascript
复制
#!/bin/tcsh
vi my_file < `tty` > `tty`
票数 21
EN

Stack Overflow用户

发布于 2009-11-07 05:47:47

出现这个错误的原因是,当您在您的环境中启动一个shell时,它是在一个子shell中启动的,这个子shell没有将STDIN和STDOUT连接到TTY --可能是因为这是在某种类似于管道的东西中。当您重定向时,您将打开一个直接连接到设备的新连接。因此,例如,您的命令行将

代码语言:javascript
复制
$ vi < `tty` > `tty`

转到

代码语言:javascript
复制
$ vi < /dev/ttys000 > /dev/ttys000

因此,您实际上并没有使用旧的STDIN/STDOUT,而是创建了两个新文件并将它们映射到vi进程的STDIN/STDOUT。

现在,告诉我们你用这个做了什么,我们将告诉你如何避免这种杂乱。

票数 11
EN

Stack Overflow用户

发布于 2012-10-20 00:41:34

我想做一些类似的事情。我想要一个别名,它可以找到我正在处理的最后一个文件,并在vi(1)中打开它进行编辑。无论如何,我不知道如何将它作为一个可读的别名(在tcsh中),所以我只创建了一个丑陋的shell脚本(csh,因为我老了):

代码语言:javascript
复制
#!/bin/csh

set DIR = "~/www/TooMuchRock/shows/"

set file = $DIR`ls -t $DIR | head -1`
set tty = `tty`

vi $file <$tty >$tty

(1)本地,vi vi:别名为/usr/ kraftwerk:bin> /bin/vim -u ~/.exrc

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1690274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档