我想我的tcsh脚本启动编辑器(例如,vi,emacs):
#!/bin/tcsh vi my_file
这将使用my_file启动vi,但首先显示警告"Vim:警告:输出不是终端",并且我的键击不会出现在屏幕上.在我杀死vi之后,我的终端窗口搞砸了(没有新行),需要"重置".我尝试了"emacs -nw","xemacs -nw"和pico,结果相似."xemacs"可以工作,但会启动一个单独的窗口.我想重用相同的终端窗口.
有没有办法从脚本启动编辑器,以便它重用相同的终端窗口?
我回答了自己的问题!您必须重定向终端输入和输出:
#!/bin/tcsh vi my_file < `tty` > `tty`
你得到错误的原因是,当你在你的环境中启动一个shell时,它是从一个子shell开始的,STDIN和STDOUT没有连接到TTY - 可能是因为它就像管道一样.重定向时,您将直接打开与设备的新连接.因此,例如,您的命令行会转
$ vi < `tty` > `tty`
成
$ vi < /dev/ttys000 > /dev/ttys000
所以你并没有真正使用旧的 STDIN/STDOUT,你创建了两个新文件并将它们映射到你的vi进程的STDIN/STDOUT.
现在,告诉我们你正在做什么,我们会告诉你如何避免这种污染.
我想做类似的事情.我想要一个能找到我正在处理的最后一个文件的别名,并在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)kraftwerk:bin>其中vi vi:别名为/ usr/local/bin/vim -u~/.exrc