Tìm ra lệnh nào tôi chạy lần cuối bắt đầu một cách nhất định?


8

Trên môi trường dòng lệnh bash, bạn có thể làm !!để chạy lại lệnh cuối cùng của mình. Và bạn có thể nhấn mũi tên lên để xem lệnh cuối cùng bạn đã chạy. Nhưng nếu bạn muốn chỉ nhìn thấy nhưng không chạy lệnh cuối cùng bạn đã chạy bắt đầu theo một cách nhất định thì sao?


1
Bạn có thể vui lòng sửa đổi câu hỏi của bạn. Tôi vẫn chưa rõ những gì bạn đang hỏi.

Câu trả lời:


18

Nếu bạn tìm kiếm lịch sử thông qua Ctrl+ rvà gõ một số chữ cái của lệnh và không nhấn Enternhưng nhấn , lệnh sẽ hiển thị và sẽ không chạy. Một cách khác là:

history | grep 'mycommand'

Chiếc áo lịch sử đẹp này cũng có thể giúp ích.


1
Và nếu bạn không tìm kiếm trận đấu đầu tiên và muốn tiếp tục tìm kiếm ngược, hãy nhấn ctrl-r nhiều lần. Và đây chỉ là một trong nhiều lệnh mạnh mẽ được cung cấp bởi thư viện bash history & readline.
orion

Xem xét bạn có câu trả lời đã được xác minh, tôi sẽ lấy câu trả lời của tôi và nếu bạn muốn sử dụng "^.\{7\}pattern"biểu thức trong câu trả lời của mình, bạn có thể làm như vậy!

nếu bạn muốn chỉnh sửa một số lệnh và chạy lại chúng, bạn cũng có thể sử dụngfc ### ###
Kiwy

9

Bạn có thể hiển thị lệnh chạy cuối cùng, bằng cách nối :pvào !!:

$ echo 123
123
$ !!:p
echo 123

Nếu bạn muốn hiển thị lệnh cuối cùng chạy với tên nhất định, hãy sử dụng một dấu chấm than:

$ echo 123
123
$ pwd
/home/cuonglm
$ !echo:p
echo 123

4

Mỗi câu trả lời ở đây, theo như tôi có thể nói, là không di động. Đối với tùy chọn di động, hãy xem xét bảo đảm POSIX fc:

    $ man fc

-E biên tập Sử dụng trình biên tập được đặt tên bởi biên tập viên để các lệnh chỉnh sửa. Chuỗi trình soạn thảo là tên tiện ích, có thể tìm kiếm thông quabiến PATH ... Giá trị trongbiến FCEDIT sẽ được sử dụng làm mặc định khi e không được chỉ định. Nếu FCEDIT là null hoặc unset, ed sẽ được sử dụng làm trình chỉnh sửa.

−l (Chữ cái ell.) Liệt kê các lệnh thay vì gọi trình soạn thảo trên chúng. Các lệnh sẽ được viết theo trình tự được chỉ định bởi các toán hạng đầu tiên và cuối cùng, như bị ảnh hưởng bởi −r , với mỗi lệnh đứng trước số lệnh.

Supn Loại bỏ số lệnh khi liệt kê với −l .

Reverser Đảo ngược thứ tự của các lệnh được liệt kê (với −l ) hoặc được chỉnh sửa (với cả −ls ) .

Thực hiện lại lệnh mà không cần gọi trình soạn thảo.

TOÁN HẠNG

đầu tiên , cuối cùng Chọn các lệnh để liệt kê hoặc chỉnh sửa. Số lượng các lệnh trước đó có thể được truy cập phải được xác định bởi giá trị củabiến HISTSIZE . Giá trị của đầu tiên hoặc cuối cùng hoặc cả hai sẽ là một trong những điều sau đây:

[+ hoặc-] số Một số dương (hoặc âm ) đại diện cho một số lệnh; số lệnh có thể được hiển thị vớitùy chọn −l ... Ví dụ: 1 là lệnh ngay lập tức trước đó ...

Khi tùy chọn −l được sử dụng để liệt kê các lệnh, định dạng của mỗi lệnh trong danh sách sẽ như sau:

    "%d\t%s\n", <line number>, <command>

Nếu cả hai tùy chọn −l−n được chỉ định, định dạng của mỗi lệnh sẽ là:

    "\t%s\n", <command>

Nếu bao gồm nhiều hơn một dòng, các dòng sau dòng đầu tiên sẽ được hiển thị là:

    "\t%s\n", <continued-command>

Nhưng hãy chắc chắn sử dụng -l hoặc -e nếu bạn CHỈ muốn xem / chỉnh sửa các lệnh của mình. Theo mặc định fcsẽ mở danh sách lệnh được yêu cầu trong FCEDIT (lưu ý khác với biến môi trường EDITOR của bạn ) và, khi FCEDIT thoát, fcsẽ chạy các lệnh đã chỉnh sửa.

Dù sao, cụ thể câu trả lời cho câu hỏi này có thể là:

    % fc -l -1

Hoặc không có số dòng:

    % fc -ln -1

Hoặc năm lệnh cuối cùng theo thứ tự ngược lại:

    % fc -lrn -1 -5

Trong máy nhắn tin của bạn:

    % fc -lrn -1 -5 |$PAGER

Đối với cuộc gọi cuối cùng của bạn đến fc:

    % fc -l fc

+1 cho nỗ lực. Tuy nhiên, câu hỏi được gắn thẻ bash
grebneke

Nó hoạt động trong bash, và mọi thứ khác. Việc sử dụng bashkhông loại trừ tính di động, nhưng chắc chắn sẽ phát triển các thói quen xấu.
mikeerv

Câu trả lời tốt nhất ở đây và nên được chấp nhận, trên tài khoản về tính di động.
wildeyes

2

nhấn Ctrlrrồi bắt đầu gõ lệnh bạn muốn xem. Bash sẽ hoàn thành dần dần. Khi bạn hài lòng, nhấn Enterđể chạy lại hoặc Ctrlghủy bỏ.


2

Nếu bạn chỉ muốn lệnh cuối cùng sử dụng:

 history | cut -c 8- | tail -n 2 | head -n 1 

Nếu bạn muốn có thể làm điều đó nhiều lần, hãy đặt một khoảng trắng trước historyhoặc sử dụng:

 history | cut -c 8- | grep -Ev '^history' | tail -n 1

Nếu bạn chỉ muốn xem lệnh cuối cùng bắt đầu bằng mẫu xyz:

 history | cut -c 8- | grep -E '^xyz'  | tail -n 1 

Nhưng điều này không hoạt động nếu mẫu đó sẽ là các ký tự ban đầu của 'lịch sử' và sau đó bạn sẽ cần một cái gì đó như:

history | cut -c 8- | grep -Ev 'history \|' | grep -E '^hist'  | tail -n 1 

Có một lỗi đánh máy trong lần đầu tiên bạn sử dụng cut.
jon

1
bind '"\ep": history-search-backward'
bind '"\en": history-search-forward'

Và sau đó bạn có thể nhập một số văn bản, và sau đó Alt-pđể tìm kiếm các lệnh cuối cùng bắt đầu giống nhau (và Alt-p, Alt-nđể quay vòng qua lại chúng).

(Đó là các ràng buộc khóa mặc định cho các vật dụng tương tự trong zsh)


0

Thêm các dòng này trong một tệp ~/.inputrc:

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

Sau đó source ~/.inputrctrong vỏ của bạn (hoặc chỉ khởi động lại vỏ).

Bây giờ bạn có thể nhập một vài chữ cái của lệnh và sau đó sử dụng mũi tên lên / xuống để xoay vòng qua các lệnh bắt đầu bằng vài chữ cái đó.

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.