Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使ctrl+;c与子shell命令交互时是否取消整个命令?_Linux_Bash_Unix_Process_Posix - Fatal编程技术网

Linux 如何使ctrl+;c与子shell命令交互时是否取消整个命令?

Linux 如何使ctrl+;c与子shell命令交互时是否取消整个命令?,linux,bash,unix,process,posix,Linux,Bash,Unix,Process,Posix,我有一个简单的shell别名 alias fz='vim -p $(fzf -m)' fzf是一个交互式终端程序,它只有在终止时才会在标准输出上发送文件名列表。然后用于打开使用vim选择的文件 现在的问题是,当我决定取消并点击ctrl+c时,shell继续前进,仍然打开vim(就像我刚刚运行了vim-p)。这是有道理的 现在,解决眼前问题的一个方法是简单地使我的别名更复杂,以便在fzf的输出为空时它不会启动vim。或者,如果fzf的退出代码不是零,我可能会中止启动vim 然而,我很好奇,当我按

我有一个简单的shell别名

alias fz='vim -p $(fzf -m)'
fzf是一个交互式终端程序,它只有在终止时才会在标准输出上发送文件名列表。然后用于打开使用vim选择的文件

现在的问题是,当我决定取消并点击ctrl+c时,shell继续前进,仍然打开vim(就像我刚刚运行了
vim-p
)。这是有道理的

现在,解决眼前问题的一个方法是简单地使我的别名更复杂,以便在fzf的输出为空时它不会启动vim。或者,如果fzf的退出代码不是零,我可能会中止启动vim

然而,我很好奇,当我按住ctrl+c键时,如何命令shell终止这个
fz
。当我处于子shell上下文中时,这是不可能的吗?我可以通过设置进程组id来实现吗


我尝试了
set-m
,但它没有改变行为。

我不确定,因为我还没有最终测试过它,但是,根据我的说法,如果我将别名更改为脚本,它将执行我想要的操作。更新:这似乎不起作用。即使使用
设置-m
。不过,我可以确认pgid与shell脚本版本设置正确。文件名列表是如何分隔的?(也就是说,带空格的文件名是如何表示的?)——在大多数情况下,这个别名不会用于不寻常/令人惊讶的名称。@带空格的CharlesDuffy文件名可能会打破这一点,但这是可以的(与问题的目的完全无关)。想象一下,如果我使用的是
find-print0
xargs-0
而不是bash的哪个版本?(您是否有一个足够新的进程替换的PID是
wait
able?--这将允许根据其退出状态进行分支,或者是否通过信号终止)脚本将由bash 4.3.11运行,并以交互方式使用zsh 5.3.1