Làm cách nào để bash (Terminal.app) ghi nhớ lịch sử của các phiên trước đó?


11

Trong máy tính của tôi tại nơi làm việc, bash shell của tôi ghi nhớ lịch sử từ các phiên trước đó, ngay cả khi tôi vừa mở một thiết bị đầu cuối mới.
Trong máy tính của tôi ở nhà, điều này không xảy ra.
Tôi có cùng hệ điều hành 10.6.8 trong cả hai máy và tôi không có bất kỳ cài đặt lịch sử nào liên quan .bash_profile.
Làm cách nào tôi có thể thiết lập tính năng này trên máy tính ở nhà để nó ghi nhớ lịch sử qua các phiên?


Cũng được hỏi tại superuser.com/q/421544/4714
glenn jackman

Câu trả lời:


11

Bạn sẽ cần cho bash biết nơi lưu giữ tệp lịch sử của bạn và có bao nhiêu dòng để giữ:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile

3
Tất cả điều đó là không cần thiết theo mặc định. Cấu hình bash mặc định (ít nhất là trên Mac OS X) cho phép lịch sử lệnh.
Chris Trang

Từ khóa, / nên /. Nếu anh ta không ghi lại lịch sử, điều này sẽ buộc bash giữ lịch sử trên init.
Hồ Aaron

2
Không chỉ đơn thuần nên , nhưng sẽ trừ khi một cái gì đó đã được thực hiện để triệt tiêu hành vi lịch sử mặc định, trong trường hợp đó, chỉ cần đưa một số giá trị vào các biến này chỉ đơn thuần là vượt qua vấn đề thực tế. Nếu câu trả lời này giải quyết được vấn đề, thì một cái gì đó khác thực sự bị rối và nên được sửa chữa để tránh các vấn đề khác.
Chris Trang

Bạn có thể thiết lập các cài đặt này, nhưng tôi đã tìm thấy một giải pháp / câu trả lời đơn giản hơn nếu bạn chỉ muốn "bật" lịch sử trên thiết bị đầu cuối. Nó chỉ hoạt động tốt với tôi apple.stackexchange.com/a/220667/243988 (Tôi đang sử dụng macOS High Sierra)
jpruizs

4

Tôi chỉ phát hiện ra tôi đã có một vấn đề tương tự, mặc dù sử dụng lao động của tôi chỉ có hai máy Mac, và không phải ngồi trên tôi bàn. Không thể chấp nhận, nhưng một trận chiến cho một thời điểm khác.

Dù sao, ở nhà, Mac Mini (di chuyển từ MacBook Pro) đã không hợp tác ngay cả sau khi cài đặt .bashrcvà / hoặc .profile. Sau đó, tôi phát hiện ra rằng ~/.bash_historytập tin của tôi được sở hữu một cách bí ẩn. Phải làm điều này:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(Vâng, tôi biết nó có thể được thực hiện trong ít lệnh hơn. Thói quen.)

Sau đó tôi rời Terminal và bắt đầu một cái mới. Khốn nạn! Tất cả các loại lịch sử bị mất trước đây đã ùa về. Làm thế nào rất tốt đẹp.

Khả năng bất cứ ai đọc điều này đã vô tình đặt mình vào tình trạng khó khăn này: 0,2%. Tôi chắc chắn rằng tôi đã làm hỏng việc này khi quá nhiệt tình "sửa chữa" thứ khác.


4

Tôi đã có vấn đề này và những gì làm việc cho tôi là tạo một tệp có tên .bash_sessions_disabletrong thư mục người dùng của tôi ( ~/).

Về cơ bản OS X tạo các tệp lịch sử trong .bash_sessionsthư mục cho mỗi phiên (trong trường hợp của tôi, một tệp cho mỗi Tab). Và thậm chí đóng đúng các phiên này, OS X không phát lại lịch sử .bash_history.

Tạo .bash_sessions_disablebạn vô hiệu hóa hành vi này.

touch ~/.bash_sessions_disable

Vô hiệu hóa lịch sử lệnh mỗi phiên, hành vi mặc định là hành vi ngược lại với những gì được hỏi.
Chris Trang

@ChrisPage Điều đó chỉ đúng nếu người hỏi đang hỏi về lịch sử mỗi phiên, điều này dường như không đúng ("ghi nhớ lịch sử qua các phiên"). Vô hiệu hóa hành vi phiên bash ENABLES phát lại một lịch sử .bash_historythay vì giữ lịch sử trong .bash_sessions/thư mục. Đây là câu trả lời đúng imho.
Matt H

@MattH Câu hỏi hỏi làm thế nào để lịch sử hoạt động trở lại, bởi vì nó dường như hoàn toàn không hoạt động và việc vô hiệu hóa tính năng lịch sử mỗi phiên này không đi đúng hướng. Nếu có lỗi trong cơ chế lịch sử mỗi phiên, ai đó nên gửi báo cáo lỗi, nhưng việc đưa ra câu trả lời như thể tắt nó đi bằng cách nào đó thường đúng cho tất cả người dùng là Sai. Nó thường hoạt động tốt. Xem ý kiến ​​của tôi về các câu trả lời khác nhau để biết thêm thông tin.
Chris Trang

Tôi cũng nên đề cập lại điều này khi tôi nhận xét ban đầu: vô hiệu hóa toàn bộ cơ chế lưu / khôi phục bash có nghĩa là biện pháp cuối cùng và nên tránh nếu có thể. Bạn chỉ có thể tắt hành vi lịch sử lệnh mỗi phiên bằng cách đặt SHELL_SESSION_HISTORYthành 0, như được ghi trong tài liệu /etc/bashrc_Apple_Terminal.
Chris Trang

1

Câu trả lời từ chủ đề Reddit này đã cứu tôi:

Có lẽ RVM ngăn lối ra "hook" để bash_simes chạy. Nếu bạn nhận xét dòng sau trong .bash_profile của bạn, nó sẽ hoạt động.

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

0

Tôi đã có một vấn đề tương tự là tốt, không có lịch sử ghi lại. Các giải pháp đã cho không hoạt động, nhưng cuối cùng tôi phát hiện ra rằng vấn đề đơn giản như mất tích .bash_history

Giải pháp là đi đến /home/[username]/và thêm một tập tin .bash_history, vì vậy

nano .bash_history

và sau đó nhập bất cứ thứ gì vào tệp (nếu không nó sẽ không được tạo), thoát và lưu. Sau đó, lịch sử bắt đầu hoạt động bình thường.


Nếu điều này giải quyết vấn đề, thì một cái gì đó khác là sai và nên được sửa chữa để tránh các vấn đề khác. Nếu bạn khởi động Bash khi không có tệp lịch sử, nó sẽ tạo một tệp. Nếu nó không cố gắng tạo một hoặc không thể tạo nó, có một số lỗi với một số tập lệnh khởi động shell hoặc các quyền của thư mục chính. Ví dụ: xem câu trả lời: apple.stackexchange.com/a/118764/6883
Chris Trang
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.