Tại sao lịch sử bash trên mac của tôi sẽ không lưu?


28

Tôi đã luôn sử dụng bash cho công việc, và không bao giờ có vấn đề với nó. Bây giờ, nó không lưu bất kỳ lệnh nào trong lịch sử một lần nữa. Nếu tôi mở một thiết bị đầu cuối cửa sổ, hãy thử một số lệnh, nó hoạt động như mọi thứ đã hoạt động tốt và hiển thị cho tôi lịch sử bằng các phím mũi tên. Nhưng nếu tôi đóng cửa sổ (và đó là thời gian cần lưu trong tệp .bash_history) và mở một cửa sổ khác, không có dấu hiệu nào của các lệnh cuối cùng.

Làm thế nào tôi có thể tìm ra những gì đang xảy ra sai? Hoặc đặt lại mọi thứ từ trống.


Có thể là hồ sơ của bạn hoặc tập tin RC. Có gì trong đó?
dùng14492

1
Các quyền và chủ sở hữu trên .bash_history của bạn là gì? Của tôi là 600 và thuộc sở hữu của tôi. Ngoài ra, những gì trong $ HIST_FILE?
blm

@blm Quyền là đúng; in $ HIST_FILE tôi đã tìm hiểu về .bash_sments . Rõ ràng có vấn đề khi, vào cuối phiên, HĐH lưu các tệp đó vào tệp lịch sử. Tôi không muốn điều tra nữa vì vậy tôi chỉ cần đặt cái này vào nhà .bash_sessions_disablevà biết nó sẽ trở lại hành vi mặc định
abaini01

Vui lòng xem xét việc gửi báo cáo lỗi với Apple: developer.apple.com/orms-reporting
Trang Chris

Câu trả lời:


31

Tôi đã làm điều này:

Thêm một biến vào .bash_profiletập tin

SHELL_SESSION_HISTORY=0

khởi động lại thiết bị đầu cuối và sau đó nó hoạt động như tôi muốn. (Nó đã lưu các lệnh sau khi tôi đóng thiết bị đầu cuối)

PS tôi cũng sử dụng các biến HISTFILESIZEHISTSIZE

HISTSIZE là số lượng dòng hoặc lệnh được lưu trữ trong bộ nhớ trong danh sách lịch sử trong khi phiên bash của bạn đang diễn ra.

HISTFILESIZE là số dòng hoặc lệnh mà (a) được phép trong tệp lịch sử tại thời điểm khởi động của phiên và (b) được lưu trữ trong tệp lịch sử vào cuối phiên bash của bạn để sử dụng trong các phiên sau này.


3
Thêm một dòng hoạt động tốt cho tôi trên El Capitan, cảm ơn.
Aidan

2
Cảm ơn! Tôi rất muốn biết tại sao điều này cũng hoạt động, nếu ai đó tình cờ biết. (Lịch sử = 0 sẽ ám chỉ tâm trí ngu dốt của tôi rằng tất cả lịch sử sẽ bị mất, nhưng dường như nó có tác dụng ngược lại.)
Mike Williamson

@Sysqa Có một số giải pháp "ở giữa"? Tính năng "lưu và khôi phục lịch sử lệnh bash một cách độc lập cho mỗi phiên thiết bị đầu cuối được khôi phục" nghe có vẻ là một tính năng hay mà một số chương trình có thể được hưởng lợi. Có một số cách để có những lợi ích từ cấu hình trước đó và cũng là cách mới với một số loại cấu hình?
loco.loop

8

Bắt đầu trong OS X 10.11 El Capitan , tập lệnh được cài đặt hệ thống /etc/bashrc_Apple_Terminalvới Terminal để lưu / khôi phục lịch sử lệnh riêng cho từng thiết bị đầu cuối được khôi phục cho Resume .

Đọc các bình luận /etc/bashrc_Apple_Terminalđể được giải thích về cách nó quản lý lịch sử lệnh trên mỗi thiết bị đầu cuối và cách tùy chỉnh nó.

Nếu bạn tùy chỉnh, PROMPT_COMMANDhãy chắc chắn nối với giá trị trước đó để bạn không xóa lệnh do hệ thống cung cấp:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Nếu bạn cài đặt EXITtrình xử lý tín hiệu, traphãy chắc chắn thực hiện một thao tác tương tự (hoặc gọi shell_session_update từ trình xử lý của bạn nếu bạn không thể tìm ra cách nối với giá trị trước đó mà nó có liên quan một chút).

Khi bạn thoát khỏi shell, mã này sẽ lưu các lệnh mới vào lịch sử của thiết bị đầu cuối ~/.bash_sessions. Để xem liệu nó có gặp phải bất kỳ vấn đề nào không, thay vì đóng thiết bị đầu cuối, hãy thoát vỏ thủ công bằng exit(hoặc Control-D). Nó ghi thông điệp tiến trình. Lưu ý nếu nó không hoàn thành hoặc nếu bất kỳ loại thông báo lỗi hoặc cảnh báo nào được hiển thị.

Nói chung, bashrc_Apple_Terminalcố gắng phát hiện và vô hiệu hóa lịch sử mỗi phiên nếu có vẻ như người dùng đã thực hiện bất kỳ tùy chỉnh nào không tương thích với nó. Có vẻ như bạn có thể đã tìm thấy một cái mà nó không xử lý. Vui lòng xem xét việc gửi báo cáo lỗi với Apple: https://developer.apple.com/orms-reporting/


Tôi chưa thực hiện bất kỳ cấu hình đặc biệt nào nên tôi đoán đó không phải là vấn đề. Bạn có thể giải thích những gì PROMPT_COMMAND làm.
loco.loop

@ loco.loop Ý của bạn là Biến Biến của BashPT_COMMAND của Bash là gì /etc/bashrc_Apple_Terminal? Nếu sau này, tôi giới thiệu cho bạn mã, được ghi lại chi tiết. Hoặc, bạn nên bắt đầu một câu hỏi và trả lời khác về điều đó.
Chris Trang

Ý tôi là những gì PROMPT_COMMAND cho ... @ChrisPage
loco.loop

@ loco.loop Tôi giới thiệu bạn đến tài liệu Bash, hoặc đề nghị bạn bắt đầu hỏi đáp về điều đó.
Chris Trang

6

Chỉ trong trường hợp có những người khác ra khỏi đó mà có RVM (Ruby quản lý phiên bản) được cài đặt: Kiểm tra xem nếu bạn có dòng sau trong của bạn ~/.profile, ~/.bashrchoặc ~/.bash_profiletập tin.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Có lẽ RVM ngăn lối ra "hook" để bash_simes chạy.

Đó là vấn đề đối với tôi. Hãy thử bình luận nó ra.

Nguồn: Reddit


3

Trên bản cài đặt mới của Mac OS X (cập nhật lên 10.13.6), lịch sử lệnh bash không được lưu. Cũng không có tệp .bashrc hoặc .bash_profile. Trong trường hợp này, chỉ cần thêm một tệp .bashrc trống đã sửa nó cho tôi.

touch .bashrc

Đó dường như là tất cả những gì bạn cần ...


dường như cũng khắc phục sự cố trên Mojave / 10.14 :-)
ssc

3

Tôi đã có cùng một vấn đề với một osj Mojave mới được cài đặt. Tôi đã kiểm tra ~/.bash_historytập tin của mình và thấy điều này:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Đơn giản chỉ cần nhai nó trở lại để gilm giải quyết vấn đề. Tôi đã sử dụng:

sudo chown gilm /Users/gilm/.bash_history

và điều đó đã giải quyết vấn đề của tôi.


2

Bạn cũng có thể tạo một .bash_logouttệp với các mục sau:

shell_session_update

Nguồn từ nhận xét GitHub


Hoặc, nhập thủ công trap shell_session_update EXITmột lần và đăng xuất. Có những manh mối trong /etc/bashrc_Apple_Terminalkịch bản quá nhàm chán để đưa vào đây.
MarkHu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.