当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《如何从shell脚本启动编辑器?》经验,为你挑选了3个好方法。

我想我的tcsh脚本启动编辑器(例如,vi,emacs):

#!/bin/tcsh
vi my_file

这将使用my_file启动vi,但首先显示警告"Vim:警告:输出不是终端",并且我的键击不会出现在屏幕上.在我杀死vi之后,我的终端窗口搞砸了(没有新行),需要"重置".我尝试了"emacs -nw","xemacs -nw"和pico,结果相似."xemacs"可以工作,但会启动一个单独的窗口.我想重用相同的终端窗口.

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



1> Marc Eaddy..:

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

#!/bin/tcsh
vi my_file < `tty` > `tty`


但是......但...... ......从哪里重定向?对我来说,为什么你需要这样做仍然是个谜.
事实证明```tty \``在我的剧本中扩展为"不是tty".我只是使用了`/ dev/tty`,但我想知道它是多么便携......

2> Charlie Mart..:

你得到错误的原因是,当你在你的环境中启动一个shell时,它是从一个子shell开始的,STDIN和STDOUT没有连接到TTY - 可能是因为它就像管道一样.重定向时,您将直接打开与设备的新连接.因此,例如,您的命令行会转

$ vi < `tty` > `tty`

$ vi < /dev/ttys000 > /dev/ttys000

所以你并没有真正使用旧的 STDIN/STDOUT,你创建了两个新文件并将它们映射到你的vi进程的STDIN/STDOUT.

现在,告诉我们你正在做什么,我们会告诉你如何避免这种污染.



3> 小智..:

我想做类似的事情.我想要一个能找到我正在处理的最后一个文件的别名,并在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

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有