我想让我的tcsh脚本启动一个编辑器(例如vi、emacs):
#!/bin/tcsh
vi my_file这将使用my_file启动vi,但首先会显示警告"Vim: Warning: Output is not to to terminal“,并且我的按键不会出现在屏幕上。在我杀死vi之后,我的终端窗口被弄乱了(没有换行符),需要“重置”。我尝试了"emacs -nw“、"xemacs -nw”和“pico”,得到了类似的结果。"xemacs“可以工作,但会启动一个单独的窗口。我想重用相同的终端窗口。
有没有一种方法可以从脚本启动编辑器,以便它重用相同的终端窗口?
发布于 2009-11-07 04:48:19
我回答了我自己的问题!您必须重定向终端输入和输出:
#!/bin/tcsh
vi my_file < `tty` > `tty`发布于 2009-11-07 05:47:47
出现这个错误的原因是,当您在您的环境中启动一个shell时,它是在一个子shell中启动的,这个子shell没有将STDIN和STDOUT连接到TTY --可能是因为这是在某种类似于管道的东西中。当您重定向时,您将打开一个直接连接到设备的新连接。因此,例如,您的命令行将
$ vi < `tty` > `tty`转到
$ vi < /dev/ttys000 > /dev/ttys000因此,您实际上并没有使用旧的STDIN/STDOUT,而是创建了两个新文件并将它们映射到vi进程的STDIN/STDOUT。
现在,告诉我们你用这个做了什么,我们将告诉你如何避免这种杂乱。
发布于 2012-10-20 00:41:34
我想做一些类似的事情。我想要一个别名,它可以找到我正在处理的最后一个文件,并在vi(1)中打开它进行编辑。无论如何,我不知道如何将它作为一个可读的别名(在tcsh中),所以我只创建了一个丑陋的shell脚本(csh,因为我老了):
#!/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
https://stackoverflow.com/questions/1690274
复制相似问题