Có, mở rộng lịch sử được bật theo mặc định chỉ cho các vỏ tương tác.
Để kích hoạt nó cho một kịch bản shell, hãy viết:
set -H
Để vô hiệu hóa nó trong một vỏ tương tác, viết:
set +H
Để xác định xem hiện có mở rộng lịch sử hay không, hãy sử dụng một số dạng mã sau:
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
Trong bắt đầu để dạy một lớp vỏ, tôi đào thông qua hướng dẫn rộng rãi để cố gắng thiết lập những gì một "shell tương tác" thực sự là. Đó là một câu hỏi xoáy, vì vậy hãy để tôi cứu bạn một số rắc rối:
Shell có NHIỀU tùy chọn. Một số tùy chọn này được khởi tạo theo các cách khác nhau khi shell có thiết bị đầu cuối điều khiển (hoặc khi bắt đầu với -i
, blah blah, bất cứ điều gì, xem bên dưới).
TẤT CẢ các tùy chọn của shell có thể được thay đổi riêng lẻ.
"Vỏ tương tác" là một thuật ngữ lừa đảo khi bạn cố gắng xác định chính xác. Nó thực sự chỉ là một bộ sưu tập các cài đặt tùy chọn.
Câu hỏi về cài đặt nào làm cho vỏ tương tác hay không là không thể trả lời; nó trở nên lố bịch Nó chính xác là câu hỏi triết học tương tự như Con tàu của Theseus .
Nếu bạn bắt đầu một vỏ tương tác, nhưng sau đó vô hiệu hóa mở rộng lịch sử, sử dụng --noediting
cờ, đặt --norc
, tắt expand_aliases
, v.v., thì theo nghĩa nào là vỏ tương tác? Hoặc, khi nào nó trở nên không tương tác nữa? Bạn không thể trả lời những câu hỏi này.
Sự thật là "tương tác" chỉ là một nhãn thuận tiện cho một bộ sưu tập các tùy chọn vỏ khác nhau. Tương tự như vậy "không tương tác." Điều tương tự; chỉ là một tập hợp các hành vi mà mỗi người có thể được thay đổi riêng lẻ.
Điểm mấu chốt: shell hoạt động khác nhau khi nó được bắt đầu "tương tác" so với khi nó được bắt đầu "không tương tác". Cố gắng xác định chính xác các điều khoản này sau khi khởi động là ngớ ngẩn. Chỉ cần nhìn vào từng tùy chọn riêng biệt của vỏ để hiểu hành vi của nó.
Tôi đã quên rằng ngoài nghiên cứu của riêng tôi, tôi đã đăng tải về nó trên trang web này.