Làm thế nào tôi có thể nhớ lại đối số của lệnh bash trước đó?


Câu trả lời:


562

Bạn có thể sử dụng $_hoặc!$ gọi lại đối số cuối cùng của lệnh trước đó.

Cũng Alt + .có thể được sử dụng để gọi lại đối số cuối cùng của bất kỳ lệnh nào trước đó.


121
Ngoài ra, nếu bạn muốn một cuộc tranh cãi tùy ý, bạn có thể sử dụng !!:1, !!:2vv ( !!:0được lệnh trước đó.) Xem gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen

41
Tương tự như !$, bạn sử dụng !^cho đối số đầu tiên.
Sẽ

13
àh ... * nix ... bạn là một thứ đẹp đẽ ... mỗi ngày tôi yêu bạn nhiều hơn
jx12345

Làm thế nào chúng ta có thể đề cập đến đối số thứ hai đến cuối cùng của lệnh trước đó? ví dụ, nếu tôi đã cho echo tiger rabbit, làm thế nào tôi có thể tham khảo tigertại lệnh sau?
Chân Kim

3
Alt + .không hoạt động ở chế độ vi. Chỉ cần FYI, cho những người khác đã nhầm lẫn ở đây.
Brian McCutchon

160

Nếu lệnh trước có hai đối số, như thế này

ls a.txt b.txt

và bạn muốn cái đầu tiên, bạn có thể gõ

!:1

cho

a.txt

Hoặc nếu bạn muốn cả hai, bạn có thể gõ

!:1-2

cho

a.txt b.txt

Bạn có thể mở rộng điều này cho bất kỳ số lượng đối số, ví dụ:

!:10-12

@RNA, tôi vừa thử lại lần nữa để đảm bảo tôi không bao gồm lỗi đánh máy, bạn có thể cung cấp thêm một chút chi tiết không (ví dụ: dòng lệnh ub Ubuntu, cygwin cho windows? Thông báo lỗi? Dòng trước?)
Robert Gowland

Tôi đang sử dụng GNU bash, phiên bản 3.2.51 (1) -release (x86_64-apple-darwin13) Bản quyền (C) 2007 Free Software Foundation, Inc. Thông báo lỗi là-bash: :1-2: bad word specifier
RNA

2
Tôi nhận được điều tương tự nếu không có hai đối số trong dòng trước. Ví dụ. dòng 1 ls a.txtdòng 2ll !:1-2
Robert Gowland

bạn đúng. Đó là một sai lầm ngu ngốc tôi đã làm. cảm ơn!
RNA

Ngoài ra để có được tất cả các đối số, !:^-$có thể được sử dụng hoặc tất nhiên mã tương tự kết hợp với số.
816-8055

88

!!:n Ở đâu n là vị trí 0 dựa trên những lập luận mà bạn muốn.

Ví dụ:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

Các ! tiền tố được sử dụng để các lệnh trước đó truy cập.

Các lệnh hữu ích khác:

  • !$ - đối số cuối cùng từ lệnh trước
  • !^ - đối số đầu tiên (sau chương trình / tích hợp / tập lệnh) từ lệnh trước
  • !! - lệnh trước đó (thường được phát âm là "bang bang")
  • !n- số lệnh ntừhistory
  • !pattern - khớp lệnh gần đây nhất pattern
  • !!:s/find/replace- lệnh cuối cùng, thay thế findbằngreplace

Thông tin thêm về lịch sử lệnh


7
Thay vì !!:s/find/replace, bạn cũng có thể ^find^replace.
Big McLUNDHuge

Ngoài ra: !* - tất cả các đối số từ lệnh trước đó (sau chương trình / tích hợp / tập lệnh). ví dụ: ls *.tmp *.cache rm !*
Aphoid

68

Trong dòng lệnh, bạn có thể nhấn esc- .hoặc alt+.

Nó quay vòng qua đối số cuối cùng của các lệnh trước đó của bạn.


Tôi đã luôn luôn tìm thấy các phím để làm việc là tốt.

Các khóa @Bucket đi qua các lệnh trước đó, trong khi giải pháp do Antonio cung cấp cho phép đi qua các đối số trước đó (đối số cuối cùng của mỗi lệnh trước đó)
everyonesdesign

30

Nếu bạn biết số được đưa ra trong lịch sử cho một lệnh cụ thể, bạn có thể thực hiện bất kỳ đối số nào trong lệnh đó bằng các thuật ngữ sau.

Sử dụng sau để lấy đối số thứ hai từ lệnh thứ ba trong lịch sử,

!3:2

Sử dụng sau để lấy đối số thứ ba từ lệnh cuối cùng thứ năm trong lịch sử,

!-5:3

Sử dụng một dấu trừ, bạn yêu cầu nó đi qua từ lệnh cuối cùng của lịch sử.


19

! * chạy một lệnh mới với tất cả các đối số trước đó.

ls /tmp
cd !*
#you are now in /tmp

Điều này không làm việc cho tôi trên OSX - phải sử dụng $_thay thế.
Mike W

16

Có, bạn có thể sử dụng !$để gọi lại đối số cuối cùng của lệnh trước.


Hãy nhận biết từ khóa "cuối cùng", đặc biệt nếu lệnh của bạn chứa nhiều đối số.
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.