/ / क्या कंपाउंड कमांड की दूसरी और बाद की रेखाएं बास्ट में हिस्टकंट्रोल द्वारा प्रभावित नहीं हैं? लिनक्स, बैश

क्या कंपाउंड कमांड की दूसरी और बाद की रेखाएं हिस्टकंट्रोल द्वारा प्रभावित नहीं हैं? लिनक्स, बैश

बैश के मैन पेज से परामर्श करते समय, यह बैश इतिहास के बारे में इस वाक्य को पढ़ता है:

एक बहु-लाइन यौगिक कमांड की दूसरी और बाद की रेखाएं हैं परीक्षण नहीं किया गया है, और इसके मूल्य के बावजूद इतिहास में जोड़ा गया है 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


मुझे आशा है कि यह आपको प्रश्न का उत्तर देगा।