Làm cách nào để có lịch sử lệnh riêng biệt cho các phiên khác nhau cho cùng một người dùng?


8

Tôi gặp vấn đề này trên một số máy chủ Unix. Khi tôi mở phiên khác nhau cho cùng một người dùng, lịch sử lệnh được chia sẻ bởi tất cả các phiên. Điều này tạo ra các vấn đề nếu do nhầm lẫn tôi nhấn Ctrl-Phoặc up arrowchỉ nhấn Enter. Vào một dịp nọ, cuối cùng tôi chạy rm -rf *rất may, tôi đã ở trong thư mục mà tôi không có quyền xóa các tập tin.

Làm cách nào để có lịch sử lệnh riêng biệt cho các phiên khác nhau cho cùng một người dùng? Hầu hết thời gian tôi đang sử dụng vỏ ksh và tcsh.

Câu trả lời:


8

Từ faq ksh :

Q1. Làm cách nào để có được các tệp lịch sử riêng biệt cho shell?

A1. ksh sử dụng tệp lịch sử dùng chung cho tất cả các hệ vỏ sử dụng cùng tên tệp lịch sử. Điều này có nghĩa là các lệnh được nhập trong một cửa sổ sẽ được nhìn thấy bởi các shell trong các cửa sổ khác. Để có các cửa sổ riêng biệt, biến HISTFILE cần được đặt thành tên khác trước khi lệnh lịch sử đầu tiên được tạo.


11

Bạn có thể thêm HISTFILE=~/.hist$$vào của bạn .profile. Điều này sẽ tạo ra một tệp duy nhất cho mỗi phiên.

Bạn sẽ kết thúc với một số lượng lớn .hist*vì vậy tôi đề nghị bạn thỉnh thoảng loại bỏ chúng.


2

Tôi giả sử bạn đang nói về các phiên đồng thời; phân tách các phiên nối tiếp nhau không hữu ích lắm: bạn sẽ không bao giờ có thể sử dụng lịch sử của nó nữa, vì tất cả các phiên sẽ là duy nhất. Nếu đó là trường hợp, có lẽ bạn sẽ tốt hơn nếu chỉ vô hiệu hóa lịch sử lệnh.

Nếu chúng ta đang nói về việc tách phiên đồng thời, tôi khuyên bạn nên sử dụng Bash. Tôi khá chắc chắn rằng tôi không nhận được lịch sử lệnh từ hai phiên đồng thời với nó. Bash chỉ viết lịch sử vào .bash_historylúc đăng xuất, vì vậy lịch sử lệnh sẽ không bị xáo trộn cho đến sau khi đăng xuất. Với điều kiện sử dụng Bash là chấp nhận được, điều đó có giải quyết được vấn đề của bạn không?


Cảm ơn vì đã trả lời. Tôi đang làm việc trên HP-UX và nó chưa được cài đặt bash và tôi không có quyền cài đặt nó :(.
Hemant

1

Ill thêm một cái gì đó vào câu trả lời của Gert.

Gert

Bạn có thể thêm HISTFILE = ~ / .hist $$ vào .profile của bạn. Điều này sẽ tạo ra một tệp duy nhất cho mỗi phiên.

Của tôi

Bạn có thể xóa các tệp này tự động bằng cách thêm vào sau đây.

trap 'rm ${HISTFILE}' exit


2
Hãy cẩn thận một chút về bẫy thoát - vỏ không xếp chúng như bạn có thể hy vọng - vì vậy, bất kỳ cài đặt nào nữa của bẫy thoát sẽ ghi đè lên tất cả các bẫy trước đó. Tôi đã viết một stacker cho bẫy, nhưng nó gần như đã thổi bay mọi ngòi nổ tinh thần mà tôi có.
collier david

-1

Bạn có thể sử dụng màn hình . Tôi cũng đã tạo một biến được xác định bởi hồ sơ konsole của mình và cung cấp cho mỗi phiên một tệp lịch sử khác nhau , chỉ có những cách tôi có thể nghĩ ra.


Tôi không thể cài đặt màn hình. nó thậm chí không biên dịch trên máy chủ của tôi.
Hemant

Tôi không chắc màn hình sẽ cung cấp cho bạn khả năng như thế nào
Michael Mrozek

@Michael bạn có thể có các phiên khác nhau với màn hình và màn hình có lịch sử riêng của nó. Tôi không biết ai đó bảo tôi giải quyết vấn đề với màn hình ... Tôi không thích màn hình. khập khiễng rằng điều này đã bị hạ thấp khi câu trả lời thứ hai của tôi về cơ bản giống như những câu trả lời khác. @Hemant ... và tôi phải biết điều đó? Tôi không sử dụng màn hình để làm điều này trên hệ thống của mình. Tôi chỉ biết nó cho phép một hiệu ứng tương tự được thực hiện đúng.
xenoterracide

Tôi nghĩ rằng tôi biết những gì bạn đang mô tả, nhưng nó không phải là một tính năng màn hình, nó chỉ là một tác dụng phụ của cách hoạt động của đạn pháo. Nếu bạn mở hai shell, các lệnh được nhập trong một shell sẽ không hiển thị trong lịch sử của shell khác trừ khi shell hỗ trợ cụ thể (ví dụ, ZSH có, nhưng bạn cần kích hoạt nó một cách rõ ràng). Nó không giữ lịch sử riêng biệt, cả hai đều ghi vào tệp lịch sử chính, bạn không thể thấy các thay đổi từ mỗi trình bao vì thông thường các trình bao không kiểm tra các thay đổi tệp lịch sử sau khi chúng được tải
Michael Mrozek

@MichaelMrozek Shell korn có một lịch sử được chia sẻ cho tất cả các cửa sổ, điều này không thể bị vô hiệu hóa. Sử dụng screensẽ không giúp được gì cả.
FUZxxl
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.