it-swarm-vi.com

Hiểu dấu chấm than (!) Trong bash

Tôi đã sử dụng

history | less

để có được các dòng của các lệnh trước đó và từ các số ở phía bên trái, tôi đã tìm thấy dòng tôi muốn lặp lại (ví dụ: 22) và đã làm

!22

tại lệnh Prompt và nó đã hoạt động - thực thi tập hợp các lệnh trên dòng tôi đã làm lúc đó. Tôi không thể tìm ra dấu chấm than được sử dụng ở đâu, nó thể hiện điều gì về các hành động được thực hiện bởi bash và nơi sử dụng nó. Từ tài liệu tôi không thấy một lời giải thích nào là "hữu hình".

112
Vass

! là một tính năng ban đầu xuất hiện trong C Shell , trở lại trong những ngày trước khi bạn có thể tin tưởng vào các thiết bị đầu cuối để có các phím mũi tên. Nó đặc biệt hữu ích nếu bạn thêm số lệnh hiện tại vào Lời nhắc (PS1="\!$ ") để bạn có thể nhanh chóng nhìn vào màn hình của mình để lấy số cho các lệnh trong quá khứ.

Bây giờ bạn có thể sử dụng các phím mũi tên và những thứ như Ctrl-R để tìm kiếm lịch sử lệnh, tôi không thấy sử dụng nhiều cho tính năng này.

Một biến thể của nó bạn vẫn có thể thấy hữu ích là !!, thực hiện lại lệnh trước đó. Tự nó, tôi không tìm thấy !!Enter bất kỳ nhanh hơn chỉ Enter, nhưng nó có thể hữu ích khi kết hợp thành một lệnh lớn hơn.

Ví dụ: Một phổ biến lỗi thí điểm trên Sudo hệ thống dựa trên là để quên tiền tố Sudo trên một lệnh yêu cầu thêm đặc quyền. Một người mới retypes toàn bộ lệnh. Học sinh siêng năng chỉnh sửa lệnh từ lịch sử lệnh của Shell. Một loại giác ngộ Sudo !!.

Bash cho phép bạn vô hiệu hóa ! xử lý trong Shell với set +o histexpand hoặc là set +H. Bạn có thể tắt nó trong Zsh với set -K.

157
Warren Young

Nếu không có câu trả lời dài hơn ở đây thì chắc chắn có một câu trả lời về Siêu người dùng, vì tôi đã đọc một câu gần đây. Trong trang bash man bạn có thể tìm thấy một phần rất lớn có tiêu đề MỞ RỘNG LỊCH SỬ về vấn đề này.

Bạn có thể thực hiện toàn bộ Máy chủ hơn là chỉ chạy lệnh cuối cùng hoặc số lệnh X. Bạn có thể thực hiện những việc như !cat để chạy lệnh cuối cùng bắt đầu bằng cat. Hoặc là !?bash?:s/bash/csh/ chạy lệnh cuối cùng chứa bash nhưng thay thế nó bằng csh.

52
Cry Havok

Nhiều hơn nữa có thể được thực hiện với ! nhu la:

  • thực hiện một lệnh được gõ trước 3 lệnh: !-3
  • thực hiện một lệnh bắt đầu bằng !ls

và nhiều hơn nữa. Xem 15 ví dụ mở rộng lịch sử Linux Bash bạn nên biết

40
user379997

Tất nhiên bạn có thể làm !! để sử dụng lại lệnh cuối cùng trong bash Shell. Và sau đó là !$ để sử dụng lại phần cuối của lệnh cuối cùng của bạn.

ví dụ. xem một số tập tin

less path/to/your/file.txt

Nếu bây giờ bạn muốn chỉnh sửa cùng một tệp, bạn có thể sử dụng !$ để chỉ nhận đường dẫn tệp từ lệnh cuối cùng

vim !$

BIÊN TẬP:

Bạn có thể sử dụng tất cả các đối số của lệnh trước với !*

ví dụ: Điều này sẽ tạo ra một số tệp và xóa tất cả chúng

$ touch a.txt b.txt c.txt d.txt
$ rm !*

Một lần nữa, bạn có thể sử dụng một đối số cụ thể của lệnh trước đó

ví dụ. Điều này tạo ra 4 tệp và sẽ xóa tệp thứ 3 (c.txt)

$ touch a.txt b.txt c.txt d.txt
$ rm !:3

Tương tự, bạn có thể sử dụng một loạt các đối số từ lệnh cuối cùng như sau

$ touch a.txt b.txt c.txt d.txt
$ rm !:2-4

Điều này sẽ sử dụng lại các đối số 2 đến 4 để đánh giá biểu thức thành rm b.txt c.txt d.txt

6
Teshan Shanuka J

Một người bạn của tôi đã gửi email cho tôi điều này:

Đó là một phần của GNU thư viện lịch sử. Trong bash, nó được sử dụng để chạy lại các lệnh trong lịch sử của bạn. .c để biết chi tiết thực hiện.

4
Vass