कमांड लाइन निष्पादित होने पर हर बार बैश स्क्रिप्ट को चलाएं


9

मैं एक नया उबंटू / लिनक्स उपयोगकर्ता हूं, मैं अपने शीर्षक के रूप में एक प्रश्न पूछना चाहता हूं।

उदाहरण के लिए, मेरे पास एक बैश फाइल है ./script, मैं किसी भी कमांड लाइन को टाइप करने पर इसे अपने आप चलाना चाहूंगा। एक बार जब मैं कमांड लाइन निष्पादित करता हूं, तो निष्पादित pwdकिया ./scriptजाएगा। एक बार जब मैं अगली कमांड लाइन टाइप करूंगा ls -laतो ./scriptवसीयत को फिर से निष्पादित किया जाएगा।


4
क्या हम पूछ सकते हैं: टाइप किए गए प्रत्येक आदेश पर आप किस प्रकार की कार्रवाई करना चाहते हैं ? और यह केवल उन लोगों के लिए होना चाहिए जो अंतःक्रियात्मक रूप से टाइप करते हैं? या यह भी एक स्क्रिप्ट में किसी भी आदेश के लिए? और ssh पर टाइप की गई कमांड्स के बारे में क्या? आदि यह एक XYProblem
ओलिवियर

जवाबों:


13

आपको PROMPT_COMMANDचर सेट करने की आवश्यकता है । से man bash:

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

उदाहरण के लिए, यह /tmp/PCएक कमांड निष्पादित होने पर हर बार वर्तमान तिथि लिखेगा :

 $ PROMPT_COMMAND="date > /tmp/PC"

1
हां, मुझे मिल गया .. बहुत अच्छा समाधान। (upvoted)
एंडर फान

1
ये गलत है। कमांड echo $(date)को घोषणा समय पर चलाया जाएगा, इसलिए हमेशा उसी समय दिखाएगा (सहेजें)।
heemayl

@ हेमायल: बेशक आप सही कह रहे हैं, मैंने इसे ठीक कर दिया
अर्कादिअस ड्रेकज़ीक

@ l @cphan यदि इनमें से किसी एक उत्तर ने आपकी समस्या हल कर दी है, तो कृपया एक क्षण लें और बाईं ओर के चेक मार्क पर क्लिक करके इसे स्वीकार करें। यह प्रश्न के उत्तर के रूप में चिह्नित करेगा और स्टैक एक्सचेंज साइटों पर धन्यवाद व्यक्त करने का तरीका है।
टेराडॉन

@ हेमायल: क्यों? ...
अर्कादिअस ड्रब्ज़क

11

आप PROMPT_COMMANDपर्यावरण चर की तलाश कर रहे हैं , इस चर के मूल्य को कमांड के रूप में निष्पादित किया जाएगा, टर्मिनल में दिए गए प्रत्येक कमांड को अगले प्रॉम्प्ट दिखाने से ठीक पहले निष्पादित किया जाता है।

उदाहरण के लिए, इसे इस प्रकार सेट करें:

export PROMPT_COMMAND='/path/to/script'

स्क्रिप्ट बनाओ /path/to/script, पहले निष्पादन योग्य।

अब प्रत्येक कमांड के बाद स्क्रिप्ट को चलाया जाएगा।

बस ध्यान दें, यदि आप चाहते हैं कि चर निर्यात न हो, तो इसे पर्यावरण के बजाय एक शेल चर बनाएं, छोड़ें export:

PROMPT_COMMAND='/path/to/script'

से man bash:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.

मुझे मिल गया, आपकी मदद के लिए बहुत बहुत धन्यवाद :) (upvoted btw)
एंडर फान

क्यों इस्तेमाल कर रहे हो export?
अर्कादियुस डेर्स्कज़ीक

@ArkadiuszDrabczyk exportवैरिएबल को PROMPT_COMMANDएक पर्यावरण वैरिएबल बना देगा यानी वैरिएबल वर्तमान शेल के सभी चाइल्ड प्रोसेस (जैसे सबस्क्रिप्शन) के लिए उपलब्ध होगा। यदि आप इसे केवल वर्तमान शेल सत्र (शेल चर) के भीतर सीमित करना चाहते हैं, तो निकालें export
heemayl

5
@heemayl: IMO exportयहां एक अच्छा अभ्यास नहीं है - PROMPT_COMMANDकेवल एक इंटरैक्टिव शेल स्टार्टअप फ़ाइल में सेट किया जाना चाहिए और पर्यावरण में दिखाई नहीं देना चाहिए
Arkadiusz Drabczyk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.