ฉันมักจะใช้เทคนิคที่อธิบายไว้ในคำตอบที่ได้รับการยอมรับ:
diff <(ls old) <(ls new)
แต่ฉันพบว่าฉันมักจะใช้มันพร้อมกับคำสั่งที่ซับซ้อนกว่าตัวอย่างด้านบน ในกรณีเช่นนี้อาจทำให้รำคาญคำสั่ง diff ฉันคิดวิธีแก้ปัญหาที่คนอื่นเห็นว่ามีประโยชน์
ฉันพบว่า 99% ของเวลาที่ฉันลองใช้คำสั่งที่เกี่ยวข้องก่อนที่จะทำงานต่างกัน ดังนั้นคำสั่งที่ฉันต้องการจะแตกต่างกันในประวัติศาสตร์ของฉัน ... ทำไมไม่ใช้มัน?
ฉันใช้ประโยชน์จากทุบตีแก้ไขคำสั่ง (fc) เพื่อรันคำสั่งสองครั้งสุดท้าย:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
ธง fc คือ:
-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") )
}
ซึ่งรองรับการระบุบรรทัดประวัติที่จะใช้ หลังจากใช้ทั้งฉันพบว่านามแฝงเป็นรุ่นที่ฉันต้องการ