Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Làm chủ Bash History: Lệnh nâng cao, hồi tưởng nhanh, và mẹo chỉnh sửa

Bash có lịch sử phong phú. Nghĩa là, nó là shell cũ có tổ tiên lâu đời hơn (Bourne shell), nhưng cũng có lệnh history tuyệt vời vượt trội tất cả giao diện lịch sử shell khác dựa trên số tính năng. Phiên bản Bash của history cho phép tìm kiếm ngược, hồi tưởng nhanh, viết lại lịch sử, và hơn nữa.

Lệnh history không giống nhiều lệnh khác. Bạn có thể quen lệnh là file thực thi đặt ở vị trí hệ thống như /usr/bin, /usr/local/bin, hoặc ~/bin. Lệnh built-in history không ở trong PATH và không có vị trí vật lý:

$ which history

which: no history in [PATH]

Thay vào đó, history là hàm built-in của chính shell:

$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg...]

Hiển thị hoặc thao tác danh sách lịch sử.
[...]

Vì vậy, hàm history trong mỗi shell là duy nhất, nên những gì bạn dùng trong Bash có thể không chạy trong Tcsh hay Fish hay Dash, và ngược lại. Trong vài trường hợp, biết Bash làm được gì có thể truyền cảm hứng user shell khác tạo hack thú vị clone hành vi Bash, và mở khóa tính năng Bash bạn chưa biết.

Xem lịch sử Bash

Cách dùng cơ bản và thường nhất của history là xem lịch sử phiên shell:

$ echo "hello"
hello
$ echo "world"
world
$ history
1 echo "hello"
2 echo "world"
3 history

Chỉ định sự kiện (Event designators)

Chỉ định sự kiện tìm kiếm lịch sử theo sự kiện. Một sự kiện trong ngữ cảnh này là lệnh ghi trong lịch sử, phân tách bằng ký tự newline. Nghĩa là một dòng, đánh dấu bằng số index để tham chiếu.

Chỉ định sự kiện chủ yếu bắt đầu bằng dấu chấm than, đôi khi gọi là bang (!).

Để chạy lại lệnh từ lịch sử, dùng dấu chấm than theo ngay (không khoảng trắng) bằng số index của lệnh muốn chạy. Ví dụ, dòng 1 chứa lệnh echo "hello", muốn chạy lại:

$ !1
echo "hello"
hello

Bạn dùng vị trí tương đối bằng số âm dòng lùi từ vị trí hiện tại trong lịch sử. Ví dụ, lùi 3 entry:

$ echo "foo"
foo
$ echo "bar"
bar
$ echo "baz"
baz
$ !-3
echo "foo"
foo

Nếu chỉ lùi một dòng, dùng shorthand !! thay vì !-1. Tiết kiệm một phím gõ!

$ echo "foo"
$ !!
echo "foo"
foo

Tìm kiếm chuỗi (String search)

Bạn cũng tìm kiếm chuỗi cụ thể qua các entry, ngược, để chạy lệnh. Để tìm lệnh bắt đầu bằng chuỗi cụ thể, dùng dấu chấm than theo ngay (không khoảng trắng) bằng chuỗi muốn tìm:

$ echo "foo"
$ true
$ false
$ !echo
echo "foo"
foo

Bạn cũng tìm lệnh chứa chuỗi ở bất kỳ vị trí (không chỉ đầu). Làm vậy, dùng ! cộng chuỗi tìm kiếm như thường, nhưng bao quanh chuỗi bằng dấu hỏi hai đầu. Bỏ dấu hỏi cuối nếu biết chuỗi ngay lập tức theo sau bởi newline (nghĩa là điều cuối gõ trước Enter):

$ echo "foo"
$ true
$ false
$ !?foo?
echo "foo"
foo

Thay thế chuỗi (String substitution)

Tương tự tìm chuỗi đầu dòng, bạn tìm chuỗi và thay bằng chuỗi mới, thay đổi lệnh:

$ echo "hello"
hello
$ echo "world"
world
$ ^hello^foo
echo "foo"
foo

Làm lịch sử hữu ích

Trong Bash, lệnh history làm được nhiều hơn đã nói, nhưng đây khởi đầu tốt để quen dùng lịch sử thay vì chỉ xem như tham chiếu. Dùng history thường xuyên, xem bạn làm được bao nhiêu mà không phải gõ lệnh. Bạn có thể tự ngạc nhiên!