मैं बाश में आदेशों की सूची को कैसे रद्द कर सकता हूं?


10

बैश में, कभी-कभी मैं कमांड और हिट की सूची में टाइप करूंगा Enter, और बाद में केवल यह महसूस करूंगा कि सूची के अंत में कुछ कमांड के साथ कोई गलती है। मुझे पता है कि अगर मैं Ctrl+ दबाता हूं तो Cयह वर्तमान में चल रही कमांड को समाप्त कर देगा और बाकी सूची को रद्द कर देगा। क्या वर्तमान में चल रहे आदेश को समाप्त किए बिना बाकी सूची को रद्द करने का कोई तरीका है ?

उदाहरण के लिए, मान लीजिए कि मैंने कुछ टाइप किया है

foo; bar

या

foo && bar

जहां fooएक लंबे समय से चल रही आज्ञा है कि यह बहुत महत्वपूर्ण है कि बीच में न आए, और barकुछ अपरिवर्तनीय और अवांछित (कहते हैं, shutdown -h nowया rm -rf /) करता है। जबकि fooअभी भी चल रहा है, वहाँ जाने के लिए खोल बताने का एक सामान्य तरीका है fooखत्म लेकिन भाग नहीं barबाद में? (हां, मैं अनुमतियों को बदल सकता हूं barताकि यह निष्पादन योग्य न हो, लेकिन यह विशेष रूप से सुविधाजनक नहीं है यदि barऐसा कुछ है rmजो मैं इस बीच उपयोग करना चाहता हूं, और न ही यह काम करेगा यदि मैं खुद नहीं हूं barया barएक बिल्डिन नहीं है।)


आप अंतिम barआदेश को संशोधित कर सकते हैं some_command: ^bar^some_commandनिष्पादित होने से पहले।
GAD3R

3
@ GAD3R: लेकिन यह वर्तमान लाइन को संशोधित नहीं करेगा, यह एक नई शुरुआत करेगा।
अर्कादियुस ड्राज्स्की

जवाबों:


3

मैंने देखा है कि CtrlZप्रोग्राम को बैकग्राउंड प्रोसेस में शिफ्ट करने के लिए ट्रिक का उपयोग किया जाता है ।

foo && bar

@Arkadiusz Drabczyk को उन टिप्पणियों में इंगित करने के लिए धन्यवाद foo; barजो आवश्यक तरीके से नियंत्रण नहीं देते हैं।

फिर:

^Z

[1]+  Stopped                 foo

आदेश केवल पहला कार्य रोकता है और

fg %1

यह केवल कार्य fooको अग्रभूमि में लाता है और कार्य को पूरा करता है और बाहर निकलता है।

पुनश्च: यह एक फाइल में दो स्क्रिप्ट लिखने के साथ जाँच की जा सकती है। वापस आने के लिए समय देने के लिए कुछ सेकंड के लिए पहला सो रहा है।

मैं इस बात पर हार गया हूं कि CtrlZकेवल चलने वाली कमान क्यों संभालती है और बाकी को छोड़ देता है। जानकर अच्छा लगेगा।


1
मैं इसे पुन: पेश नहीं कर सकता। आप किस bashसंस्करण का उपयोग करते हैं? मैं उपयोग करता हूं GNU bash, version 4.3.46(1)-release (x86_64-slackware-linux-gnu)। मैंने 2 बैश स्क्रिप्ट लिखी हैं जो अलग-अलग फाइलों में लिखते हैं write1.sh:: pastebin.com/rbKmdWgB और write2.sh: pastebin.com/bNx3VRws । मैं उन्हें इस तरह से चलाता हूं ./write1.sh ; ./write2.sh:। पहली स्क्रिप्ट wrote 1कुछ समय के लिए गूँजती है , मैं प्रेस करता हूं C-z, यह कहता है [1]+ Stopped ./write1.shऔर मैं तुरंत दूसरी स्क्रिप्ट का आउटपुट देख सकता हूं: wrote 2बार-बार गूँज रहा है।
अर्कादिअस ड्रेबज़ीक

2
मुझे लगता है कि यह तरीका command1 && command2पाइपलाइनों के साथ काम करने का कारण है जो प्रक्रिया को संकेत Control-zभेजता SIGCHLDहै। इसके साथ जांच की जा सकती है echo $?Bashफिर देखता है कि पहली प्रक्रिया सफलतापूर्वक समाप्त नहीं हुई और अगली प्रक्रियाओं को निष्पादित नहीं करता है।
अर्कादिअस ड्रेबज़ीक

मैं उपयोग कर रहा हूं GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)। हाँ, मुझे लगता है कि आप सही हैं। foo; barवांछित तरीके से नियंत्रित नहीं किया जा सकता है। लेकिन Ctrl+Zकमांड रन होने पर हम दूसरी प्रक्रिया के आवश्यक स्टॉप कर सकते हैं foo && bar। मैं जवाब अपडेट कर दूंगा। यह इंगित करने के लिए धन्यवाद।
रेवंत चेतलुरु

@ArkadiuszDrabczyk Ctrl-Z SIGTSTP नहीं भेजता है?
मूरू

@RevanthChetluru नोट जो barअभी भी निलंबित है और jobsआउटपुट में दिखता है , इसलिए इसे संभवतः मार दिया जाना चाहिए।
मूरू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.