Có ai biết tại sao bash vẫn có tính năng thay thế lịch sử được bật theo mặc định không? My .bashrc
đã bao gồm set +H
nhiều năm nhưng một số người khác vẫn bị cắn bởi tính năng này.
Cho rằng khá nhiều người đang sử dụng các thiết bị đầu cuối có tính năng sao chép và bash được biên dịch bằng readline
thư viện và thay thế lịch sử được bật theo mặc định chỉ trong các vỏ tương tác, có thực sự có lý do nào để có tính năng này không? Không có đoạn script hiện tại nào bị phá vỡ ngay cả khi điều này bị tắt theo mặc định cho tất cả các shell.
Hãy thử điều này nếu bạn không biết tại sao thay thế lịch sử bị hỏng:
$ set +H # disable feature history substitution
$ echo "WTF???!?!!?"
WTF???!?!!?
$ set -H # enable feature history substitution
$ echo "WTF???!?!!?"
echo WTF???echo WTF???!?!!?
WTF???echo WTF???!?!!?
(Rõ ràng tính năng này có vấn đề lớn nếu nó bị tắt theo mặc định cho tất cả các tập lệnh và một tính năng tồn tại để xác minh kết quả trước khi thực hiện : shopt -s histverify
.)
Xem thêm:
&
? Tại sao tôi cần phải thoát hoặc trích dẫn một tên tệp có chứa một ?
? Có những UI cho những người nghĩ rằng đây là một vấn đề.
!$
nhiều lần trong ngày và !!
cũng khá thường xuyên. Tôi phải thừa nhận rằng tôi không sử dụng các thay thế lịch sử khác nhiều như vậy, nhưng tôi chắc chắn sẽ không vui nếu hành vi mặc định của vỏ tôi đã sử dụng trong nhiều năm đột nhiên thay đổi.
ls -l foo/bar/baz/weeble.cpp
vớiless !$
hơn thu hồi lệnh và chỉnh sửa nó.