Tôi thường sử dụng kỹ thuật được mô tả trong câu trả lời được chấp nhận:
diff <(ls old) <(ls new)
nhưng tôi thấy tôi thường sử dụng nó với các lệnh phức tạp hơn nhiều so với ví dụ trên. Trong những trường hợp như vậy có thể gây khó chịu khi tạo lệnh diff. Tôi đã đưa ra một số giải pháp mà những người khác có thể thấy hữu ích.
Tôi thấy rằng 99% thời gian tôi thử các lệnh có liên quan trước khi chạy diff. Do đó, các lệnh tôi muốn tìm khác nhau có ngay trong lịch sử của tôi ... tại sao không sử dụng chúng?
Tôi sử dụng hàm bash Fix Command (fc) để thực thi hai lệnh cuối:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Các cờ fc là:
-n : Không có số. Nó triệt tiêu các số lệnh khi liệt kê.
-l : Liệt kê: Các lệnh được liệt kê trên đầu ra tiêu chuẩn.
các -1
-1
tham khảo khi bắt đầu và kết thúc positing trong lịch sử, trong trường hợp này nó từ lệnh cuối cùng để các lệnh cuối cùng trong đó sản lượng chỉ lệnh cuối cùng.
Cuối cùng, chúng tôi gói nó vào $()
để thực thi lệnh trong một lớp con.
Rõ ràng đây là một chút khó khăn để gõ để chúng ta có thể tạo bí danh:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Hoặc chúng ta có thể tạo một hàm:
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") )
}
trong đó hỗ trợ chỉ định các dòng lịch sử sẽ sử dụng. Sau khi sử dụng cả hai tôi thấy bí danh là phiên bản tôi thích.