有沒有辦法終止一個shell函數非交互式而不會殺死運行它的shell?非交互式地終止一個shell函數
我知道shell可以被告知如何響應信號(例如USR1
),但我無法弄清楚信號處理程序如何終止函數。
如果需要,您可能會認爲要終止的函數是以「可終止」的方式寫入的(即通過聲明一些合適的選項)。
(我的切身利益是如何做到這一點爲zsh
,但我也想知道如何做到這一點的bash
和/bin/sh
)
編輯:在回答羅布瓦特的建議:
% donothing() { echo $$; sleep 1000000 }
% donothing
47139
如果在這一點上,我在運行外殼相同的終端打Ctrl-C
,則函數donothing
確實終止,而我得到的命令提示符後面。但如果相反,從不同的shell會話,我跑
% kill -s INT 47139
...的donothing
功能確實不終止。
你的意思是像控制c的東西? –
谷歌例如「bash信號處理」和第一匹配描述使用'trap'的很多示例的bash-shell的信號處理。 –
@RobWatts:我編輯了我的帖子以說明你的建議。 – kjo