有没有办法在不杀死运行它的 shell 的情况下以非交互方式终止 shell 函数?
我知道可以告诉 shell 如何响应信号(例如USR1
),但我不知道信号处理程序将如何终止函数。
如有必要,您可以假设要终止的函数已经以“可终止”的方式编写(即通过声明一些合适的选项)。
(我的直接兴趣是如何为 执行此操作zsh
,但我也有兴趣知道如何为bash
和执行此操作/bin/sh
。)
编辑:响应 Rob Watt 的建议:
% donothing () { echo $$; sleep 1000000 }
% donothing
47139
如果此时我点击Ctrl-C
了运行 shell 的同一个终端,那么函数donothing
确实会终止,并且我会返回命令提示符。但是,如果相反,从不同的 shell 会话中,我运行
% kill -s INT 47139
...donothing
函数不会终止。