बैश के मैन पेज से परामर्श करते समय, यह बैश इतिहास के बारे में इस वाक्य को पढ़ता है:
एक बहु-लाइन यौगिक कमांड की दूसरी और बाद की रेखाएं हैं परीक्षण नहीं किया गया है, और इसके मूल्य के बावजूद इतिहास में जोड़ा गया है
HISTCONTROL
.
लेकिन मैंने यह कोशिश की है:
$ HISTCONTROL=ignorespace
$ if [ -f /var/log/messages ]
> then
> echo "/var/log/message exists."
> fi
$ history | tail -2
18 HISTCONTROL=ignorespace
19 history | tail -2
ध्यान दें कि if
एक अंतरिक्ष द्वारा नेतृत्व किया जाता है। इसकी दूसरी पंक्ति क्यों है if
कंपाउंड कमांड अभी भी इतिहास में दिखाई नहीं दे रहा है?
उत्तर:
जवाब के लिए 2 № 1शेल के लिए बहु पंक्ति कमांड एक पंक्ति होगी:
$ if [ -f /var/log/messages ]
> then
> echo "/var/log/message exists."
> fi
जैसा ही है:
if [ -f /var/log/messages ]; then echo "/var/log/message exists."; fi
तो यदि आप एक लाइन कमांड पर जगह डालते हैं तो इसे इतिहास सेटिंग की तरह अनदेखा कर दिया जाएगा।
जोड़ें: खोल विकल्प cmdhist का प्रभाव
shopt -s cmdhist # set cmdhist (is set by default)
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 2
43 if [ -d /tmp ]; then echo Hello; fi
44 history 2
इस मामले में बहु-लाइन कमांड एकल रेखा से जुड़ा हुआ है।
shopt -u cmdhist # unset cmdhist
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 5
46 if [ -d /tmp ]
47 then
48 echo Hello
49 fi
50 history 5
इन मामलों में आप अलग-अलग इतिहास में प्रत्येक पंक्ति को देखते हैं।
यदि अब आप अनदेखा विकल्प सेट करते हैं तो इसे चाहिएअगर [4] की सभी 4 लाइनों पर काम करें। तो अनुमान लगाएं कि अस्वीकरण (बैश मैन में) कहेंगे कि यह सुनिश्चित नहीं है कि यह cmdhist = off के साथ हर समय काम करता है। तो अनदेखा निश्चित रूप से दूसरी पंक्ति "फिर" पर काम नहीं करेगा। यदि आप "फिर" से पहले एक जगह डालते हैं तो इसे अनदेखा नहीं किया जाएगा। यह केवल पहली पंक्ति में काम करता है लेकिन फिर अगले के लिए।
तो आखिरी उदाहरण (अंतरिक्ष के साथ दूसरी पंक्ति को अनदेखा नहीं करना)
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 5
66 if [ -d /tmp ]
67 then
68 echo Hello
69 fi
70 history 5
मुझे आशा है कि यह आपको प्रश्न का उत्तर देगा।