Hầu hết các hướng dẫn về phím tắt lịch sử Bash đều liệt kê đầy đủ từng cái có sẵn. Vấn đề với điều đó là tôi sẽ sử dụng một phím tắt một lần, sau đó lướt qua khi tôi thử tất cả các khả năng. Sau đó, tôi sẽ chuyển sang ngày làm việc của mình và hoàn toàn quên chúng, chỉ giữ lại những điều nổi tiếng !! mẹo mà tôi đã học được khi lần đầu tiên bắt đầu sử dụng Bash.
Vì vậy, hầu hết trong số họ không bao giờ cam kết với bộ nhớ.
Bài viết này phác thảo các phím tắt mà tôi thực sự sử dụng Hằng ngày. Nó dựa trên một số nội dung trong cuốn sách của tôi, Learn Bash the hard way ; (bạn có thể đọc bản xem trước của nó để tìm hiểu thêm).
Khi mọi người thấy tôi sử dụng các phím tắt này, họ thường hỏi tôi, "Bạn đã làm gì ở đó !?" Cần phải có nỗ lực hoặc trí tuệ tối thiểu, nhưng để thực sự học được chúng, tôi khuyên bạn nên sử dụng một cái mỗi ngày trong một tuần, sau đó chuyển sang cái tiếp theo. Bạn nên dành thời gian tìm hiểu chúng vì thời gian bạn tiết kiệm được sẽ rất đáng kể về lâu dài.
1. "Đối số cuối cùng":! $
Nếu bạn chỉ sử dụng một phím tắt từ bài viết này, hãy biến nó thành phím tắt này. Nó thay thế trong đối số cuối cùng của lệnh cuối cùng vào dòng của bạn.
Hãy xem xét tình huống này:
$ mv /path/to/wrongfile /some/other/place
mv: cannot stat '/path/to/wrongfile': No such file or directory
Ach, tôi đã đặt hồ sơ sai tên tệp trong lệnh của tôi. Tôi lẽ ra phải đặt tệp bên phải thay vào đó.
Bạn có thể quyết định gõ lại lệnh cuối cùng và thay thế hoàn toàn tệp tin sai bằng tệp tin đúng. Thay vào đó, bạn có thể nhập:
$ mv /path/to/rightfile !$
mv /path/to/rightfile /some/other/place
và lệnh sẽ hoạt động.
Có nhiều cách khác để đạt được điều tương tự trong Bash bằng các phím tắt, nhưng thủ thuật sử dụng lại đối số cuối cùng của lệnh cuối cùng này là mẹo mà tôi sử dụng nhiều nhất.
2. Cái " n đối số thứ "one:!:2
Đã bao giờ làm bất cứ điều gì như thế này?
$ tar -cvf afolder afolder.tar
tar: failed to open
Giống như nhiều người khác, tôi nhận được các đối số để tar (và ln ) sai thường xuyên hơn tôi muốn thừa nhận.
Khi bạn kết hợp các đối số như vậy, bạn có thể chạy:
$ !:0 !:1 !:3 !:2
tar -cvf afolder.tar afolder
và danh tiếng của bạn sẽ được lưu giữ.
Các mục của lệnh cuối cùng được lập chỉ mục bằng 0 và có thể được thay thế bằng số sau !: .
Rõ ràng, bạn cũng có thể sử dụng điều này để sử dụng lại các đối số cụ thể từ lệnh cuối cùng thay vì tất cả chúng.
3. "Tất cả các đối số":!:1- $
Hãy tưởng tượng tôi chạy một lệnh như:
$ grep '(ping|pong)' afile
Các đối số là đúng; tuy nhiên, tôi muốn khớp với ping hoặc pong trong một tệp, nhưng tôi đã sử dụng grep thay vì egrep .
Tôi bắt đầu nhập egrep , nhưng tôi không muốn nhập lại các đối số khác. Vì vậy, tôi có thể sử dụng !:1 $ lối tắt để yêu cầu tất cả các đối số cho lệnh trước đó từ lệnh thứ hai (hãy nhớ rằng chúng không được lập chỉ mục) đến lệnh cuối cùng (được biểu thị bằng $ ký tên).
$ egrep !:1-$
egrep '(ping|pong)' afile
ping
Bạn không cần chọn 1- $ ; bạn có thể chọn một tập hợp con như 1-2 hoặc 3-9 (nếu bạn có nhiều đối số như vậy trong lệnh trước đó).
4. "Cuối cùng nhưng n "một:! -2:$
Các phím tắt ở trên rất tuyệt khi tôi biết ngay cách sửa lệnh cuối cùng của mình, nhưng thường thì tôi chạy các lệnh sau bản gốc, có nghĩa là lệnh cuối cùng không còn là lệnh mà tôi muốn tham chiếu.
Ví dụ:sử dụng mv ví dụ trước đây, nếu tôi theo dõi lỗi của mình với ls kiểm tra nội dung của thư mục:
$ mv /path/to/wrongfile /some/other/place
mv: cannot stat '/path/to/wrongfile': No such file or directory
$ ls /path/to/
rightfile
Tôi không thể sử dụng ! $ nữa phím tắt.
Trong những trường hợp này, tôi có thể chèn - n : (ở đâu n là số lệnh quay lại lịch sử) sau ! để lấy đối số cuối cùng từ một lệnh cũ hơn:
$ mv /path/to/rightfile !-2:$
mv /path/to/rightfile /some/other/place
Một lần nữa, một khi bạn tìm hiểu nó, bạn có thể ngạc nhiên về tần suất bạn cần nó.
5. "Lấy cho tôi thư mục":! $:H
Cái này có vẻ ít hứa hẹn hơn về mặt nó, nhưng tôi sử dụng nó hàng chục lần mỗi ngày.
Hãy tưởng tượng tôi chạy một lệnh như sau:
$ tar -cvf system.tar /etc/system
tar: /etc/system: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors.
Điều đầu tiên tôi có thể muốn làm là truy cập / etc để xem những gì trong đó và tìm ra những gì tôi đã làm sai.
Tôi có thể làm điều này ngay lập tức với:
$ cd !$:h
cd /etc
Câu này có nội dung:"Lấy đối số cuối cùng cho lệnh cuối cùng ( / etc / system ) và xóa thành phần tên tệp cuối cùng của nó, chỉ để lại / etc . "
6. "Dòng hiện tại":! #:1
Trong nhiều năm, tôi thỉnh thoảng tự hỏi liệu tôi có thể tham khảo một đối số trên dòng hiện tại trước khi cuối cùng tra cứu và tìm hiểu nó hay không. Tôi ước gì mình đã làm như vậy từ rất lâu rồi. Tôi thường sử dụng nó nhất để tạo các tệp sao lưu:
$ cp /path/to/some/file !#:1.bak
cp /path/to/some/file /path/to/some/file.bak
nhưng một khi đã thành công, nó có thể là một giải pháp thay thế rất nhanh chóng cho…
7. "Tìm kiếm và thay thế" một:!!:gs
Lệnh này tìm kiếm trên lệnh được tham chiếu và thay thế những gì trong hai lệnh / đầu tiên ký tự với những gì trong hai ký tự thứ hai.
Nói rằng tôi muốn nói với cả thế giới rằng s của tôi phím không hoạt động và xuất ra f thay vào đó:
$ echo my f key doef not work
my f key doef not work
Sau đó, tôi nhận ra rằng tôi vừa nhấn f chìa khóa một cách tình cờ. Để thay thế tất cả f s với s es, tôi có thể nhập:
$ !!:gs/f /s /
echo my s key does not work
my s key does not work
Nó không chỉ hoạt động trên các ký tự đơn lẻ; Tôi cũng có thể thay thế các từ hoặc câu:
$ !!:gs/does/did/
echo my s key did not work
my s key did not work
Kiểm tra chúng
Chỉ để cho bạn thấy cách kết hợp các phím tắt này, bạn có thể tìm ra kết quả của các đoạn cắt móng chân này không?
$ ping !#:0:gs/i/o
$ vi /tmp/!:0.txt
$ ls !$:h
$ cd !-2:h
$ touch !$!-3:$ !! !$.txt
$ cat !:1-$
Kết luận
Bash có thể là một nguồn phím tắt thanh lịch cho người dùng dòng lệnh hàng ngày. Mặc dù có hàng ngàn mẹo và thủ thuật để tìm hiểu, nhưng đây là những mẹo yêu thích của tôi mà tôi thường xuyên sử dụng.
Nếu bạn muốn tìm hiểu sâu hơn về tất cả những gì Bash có thể dạy bạn, hãy chọn cuốn sách của tôi, Học Bash một cách khó khăn hoặc xem khóa học trực tuyến của tôi, Master the Bash shell.
Bài viết này ban đầu được đăng trên blog của Ian, Zwischenzugs.com và được sử dụng lại với sự cho phép.