2008-10-30 15 views
5

मैं बैश स्क्रिप्ट में, जब उपयोगकर्ता स्क्रिप्ट को रोकता है (ctrl - c) के साथ एक आदेश निष्पादित कैसे कर सकता हूं?बैश स्क्रिप्ट बंद होने पर रन कमांड

वर्तमान में, मैं इस है:

afplay file.mp3 

while true: 
do osascript -e "set volume 10" 
end 

लेकिन मैं यह killall afplay निष्पादित करने के लिए जब उपयोगकर्ता इसके साथ समाप्त हो गया है चाहते हैं, चाहे अगर यह होता है आदेश-सी या किसी अन्य कुंजी दबाने।

उत्तर

4

उपयोग trap

trap "kill $pid" INT TERM EXIT 

इसके अलावा killall या pkill बचने के लिए, क्योंकि यह (उदाहरण के लिए अपनी स्क्रिप्ट, या यहाँ तक कि एक अलग लिपि का एक और उदाहरण से) असंबंधित प्रक्रियाओं को मार सकता है। इसके बजाए, प्लेयर के पीआईडी ​​को एक चर में रखें और केवल उस पीआईडी ​​को मार दें। बैश प्रक्रिया एक KILL संकेत (9) यह करने के लिए प्रक्रियाओं के लिए संभव नहीं है के रूप में भेजा गया हो तो फिर भी

trap 'killall afplay' EXIT 

ध्यान दें कि यह काम नहीं करेगा:

+0

क्या आपके पास किसी प्रक्रिया के ढक्कन को पकड़ने के लिए कोई सुझाव है? (मुझे लगता है कि अगर प्रक्रिया स्थानीय रूप से शुरू हो जाती है तो यह सीधे आगे बढ़ रहा है) – isaaclw

2

आप अपने bash लिपि में एक trap बयान लगाने की जरूरत है सिग्नल को रोकें।

संबंधित मुद्दे