2010-08-20 26 views
12

Trong Matlab, có một tính năng rất hay mà tôi thích. Giả sử tôi đã gõ lệnh very-long-command và sau đó một vài lệnh sau đó. Sau đó, nếu tôi cần lệnh dài một lần nữa, tôi chỉ cần gõ very và nhấn phím mũi tên lên, lệnh dài của tôi sẽ xuất hiện. Nó tìm thấy lệnh cuối cùng bắt đầu bằng very. Tôi không thể làm tương tự trong dòng lệnh unix, khi tôi cố gắng làm điều đó, nó bỏ qua bất cứ điều gì tôi gõ, và quay trở lại các lệnh cuối cùng trong thứ tự thời gian. Có cách nào để làm điều đó?Truy xuất lịch sử lệnh giống như Matlab trong dòng lệnh unix

+0

Matlab có cài đặt mặc định tốt. Tôi luôn tự hỏi tại sao người Unix không thể cung cấp các thiết lập mặc định tốt cho những thứ này. – compie

Trả lời

8

Trong bash, đánh ctrl - r sẽ cho phép bạn thực hiện tìm kiếm lịch sử:

$ echo 'something very long' 
something very long 
$ # blah 
$ # many commands later... 
(reverse-i-search)`ec': echo 'something very long' 

Trong đoạn trên, tôi nhấn ctrl - r trên dòng tiếp theo sau khi # many commands later... và sau đó nhập ec đã đưa tôi trở lại lệnh echo. Tại thời điểm đó nhấn Nhập sẽ thực hiện lệnh.

+0

Cảm ơn! Tôi có một câu hỏi nhanh khác, nếu có hai lệnh dài được sử dụng gần đây bắt đầu bằng echo, làm thế nào tôi có thể chuyển đổi giữa hai lệnh với phương thức này? – AgCl

+1

@AgCl: [Bài đăng trên blog này] (http://ronny.haryan.to/archives/2005/03/14/tip-history-search-in-bash/) giải thích cách thiết lập 'history-search-forward 'và' history-search-backward' để điều hướng qua lịch sử. –

+0

Liên kết trên đã chết –

3

Bạn có thể làm điều tương tự bằng cách sử dụng "!". Ví dụ:

$ echo "Hello" 
Hello 
$ !echo 
echo "Hello" 
Hello 

Tuy nhiên, thường là một ý tưởng tồi nếu làm điều gì đó hủy diệt? Nếu bạn mong đợi bạn sẽ sử dụng lại một cái gì đó, sau đó tôi đề nghị bạn tạo một kịch bản shell và lưu nó đi đâu đó (bất cứ khi nào tôi có kế hoạch tái sử dụng một cái gì đó, tôi tạo một kịch bản trong ~/.local/bin).

+0

Cảm ơn, nó gần như gần gũi với Matlab, nhưng tôi không thể nhìn thấy toàn bộ lệnh trước khi nhấn enter. Tôi sẽ upvote câu trả lời khi tôi có đủ đại diện. – AgCl

+0

! Echo: p sẽ hiển thị lệnh (bash anyway) và bạn có thể chọn thực thi nó hay không. –

+0

@Ron, tuyệt. Cảm ơn. –

10

Trong bash, chức năng này được cung cấp bởi các lệnh lịch sử tìm kiếm chuyển tiếp và lịch sử tìm kiếm ngược, theo mặc định không bị ràng buộc với bất kỳ phím nào (xem here). Nếu bạn chạy

bind '"\e[A":history-search-backward' 
bind '"\e[B":history-search-forward' 

nó sẽ tạo mũi tên lên và mũi tên xuống tìm kiếm lùi lại và chuyển tiếp lịch sử cho chuỗi ký tự giữa đầu dòng hiện tại và điểm. Xem thêm this related Stack Overflow question.

Các vấn đề liên quan