मैं अक्सर स्वीकृत उत्तर में वर्णित तकनीक का उपयोग करता हूं:
diff <(ls old) <(ls new)
लेकिन मुझे लगता है कि मैं आमतौर पर ऊपर के उदाहरण की तुलना में बहुत अधिक जटिल आदेशों के साथ इसका उपयोग करता हूं। ऐसे मामलों में यह डिफरेंट कमांड को क्राफ्ट करने के लिए कष्टप्रद हो सकता है। मैं कुछ समाधानों के साथ आया हूं जो अन्य उपयोगी हो सकते हैं।
मुझे लगता है कि अलग-अलग चलने से पहले मैं संबंधित आदेशों को आज़माने का 99% समय पाता हूं। नतीजतन, जो आदेश मैं अलग करना चाहता हूं वे मेरे इतिहास में वहीं हैं ... उनका उपयोग क्यों नहीं किया जाता है?
मैं पिछले दो आदेशों को निष्पादित करने के लिए फिक्स कमांड (fc) बैश बिलिन का उपयोग करता हूं:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
एफसी झंडे हैं:
-n : कोई संख्या नहीं। लिस्टिंग करते समय यह कमांड नंबरों को दबा देता है।
-l : लिस्टिंग: कमांड मानक आउटपुट पर सूचीबद्ध हैं।
-1
-1
इतिहास में शुरू और अंत का हवाला देते हुए, इस मामले में इसकी अंतिम कमांड से अंतिम कमांड तक जो सिर्फ आखिरी कमांड देता है।
अंत में हम इसे $()
सब-कमांड में कमांड निष्पादित करने के लिए लपेटते हैं ।
जाहिर है कि यह टाइप करने के लिए थोड़ा दर्द है तो हम एक उपनाम बना सकते हैं:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
या हम एक समारोह बना सकते हैं:
dl() {
if [[ -z "$1" ]]; then
first="1"
else
first="$1"
fi
if [[ -z "$2" ]]; then
last="2"
else
last="$2"
fi
# shellcheck disable=SC2091
diff --color <( $(fc -ln "-$first" "-$first") ) <( $(fc -ln "-$last" "-$last") )
}
जो उपयोग करने के लिए इतिहास लाइनों को निर्दिष्ट करने का समर्थन करता है। दोनों का उपयोग करने के बाद मुझे लगता है कि उपनाम मुझे पसंद है।