我正在使用Ubuntu 12.04和Octave:
$ octave
octave:1> _
我将编辑器设置为gedit:
octave:1> edit editor "gedit %s"
我编辑了一个函数:
octave:2> edit someFunction
gedit按预期打开someFunction.m并提示返回,而gedit仍然打开文件:
octave:3> _
我运行了一些其他长时间运行的功能:
octave:3> runAllTests
当runAllTests正在执行时,我按CTRL-C来中断它。
观察到的行为是runAllTests被中断并且gedit被杀死。
预期的行为是runAllTests被中断并且gedit没有被杀死。
有没有人知道在这种情况下如何阻止CTRL-C杀死gedit?另外还有另一种方法可以在不杀死gedit的情况下中断runAllTests吗?
答案 0 :(得分:2)
设置:
edit editor "gedit %s &"
导致八度音程将编辑器“置于后台”,因此CTRL-C不会影响它并具有预期的行为。
答案 1 :(得分:0)
尝试:
edit mode async
指定编辑命令的异步执行模式
答案 2 :(得分:0)
问题是CTRL + C也是一个复制命令。可能需要像Octave GUI Xoctave中那样自定义IT。 They claim that customization is available.
答案 3 :(得分:0)
不幸的是,将分叉的流程置于背景中'&'使用命令行(octave-cli)时,这是不够的。
GNU Octave development webpage有关于此问题的错误。
当然,它不仅是一个编辑器问题,而且任何新的分叉进程都会受到影响。例如
octave> system("$TERM&")
在新窗口中创建一个终端,该窗口将被后续的<ctrl-c>
杀死。
我提出了一个基于shell的解决方法。这包括在后台添加额外的&#34;分叉&#34;,这将保护最终终端(或文本编辑器或其他)免受发送到八度音程的信号。简而言之,我启动了一个终端,它在后台发射另一个终端,从中我杀了第一个终端(这样就不会打扰我们了。)
创建可执行文件:
term-kill.sh
-----------------------------
#!/bin/sh
$TERM&
sleep 0.01
kill $1
-----------------------------
(注意sleep
命令,没有这些命令,第二个终端没有时间在第一个终端被杀之前从第一个终端分离。然后,命令
octave> system("$TERM -e term-kill.sh $$&")
创建一个不会被杀的终端。
要打开文本编辑器,只需考虑可执行文件
term-edit-kill.sh
------------------------
#!/bin/sh
$TERM -e $EDITOR $1&
sleep 0.01
kill $2
------------------------
并通过
更改八度edit
命令
octave> EDITOR('$TERM -e term-edit-kill.sh %s $$')
N.B。:我假设您的系统知道如何查找term-kill.sh
和term-edit-kill.sh
,并且变量$TERM
和$EDITOR
已存在且符合您的需求。终端仿真程序必须支持-e
选项。