Làm thế nào để bạn nhớ lại đối số được thông qua (n-th?) Của lệnh trước mà bạn đã sử dụng với bash?


9

Thường thì tôi phát hành các lệnh khác nhau trên cùng một tệp. Ví dụ:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

Có cách nào để sử dụng lại các đối số từ lệnh trước đó trong hiện tại để tôi không phải viết lại nó không?

Câu trả lời:


15

alt-.chắc chắn là tốt, nhưng nếu bạn tình cờ biết được đối số được đánh số nào bạn muốn, bạn có thể nhanh hơn: !:nnđối số thứ của lệnh trước đó.

Nó thường hữu ích để kết hợp điều này với không gian ma thuật. Để kích hoạt điều đó, hãy đặt .inputrc của bạn Space: magic-space. Khi được bật, khi bạn nhập không gian sau !:2, nó sẽ ngay lập tức được mở rộng thành giá trị của nó thay vì chờ bạn nhấn enter. Cứu bạn khỏi vô tình nắm lấy lập luận sai.


9

Trong bash, bạn có thể sử dụng phím tắt Alt+ ..
Đánh nó một lần, sẽ cho bạn lập luận cuối cùng. Đánh nó nhiều hơn sẽ xoay vòng qua các đối số cuối cùng của bạn.


4

Trong bash, người chỉ định cho "từ cuối cùng trên dòng lệnh trước" là !!$:

$ echo hello world
hello world
$ echo goodbye !!$
echo goodbye world # this is bash echoing actual cmd line before execution
goodbye world

Bạn cũng có thể sử dụng "cú pháp dấu mũ" để thay thế phần ban đầu của dòng lệnh; điều này rất hữu ích nếu bạn muốn thực thi một số lệnh trên cùng một tệp:

file file.dat
^file^ls -l^ #gives `ls -l file.dat`
^ls -l^stat # gives `stat file.dat`

Có nhiều khả năng hơn nữa; xem "Thay thế lịch sử" trong trang man bash (1) để biết chi tiết.


Cú pháp dấu mũ đó thực sự chậm hơn so với việc nhấn mũi tên và tự chỉnh sửa dòng lệnh ...
badp

1
!!$có thể được viết !$quá.
Mikel

3

Trong bash, bạn cũng có thể sử dụng $ _ cho đối số dòng lệnh cuối cùng của lệnh cuối cùng bạn đã nhập:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

trở thành:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_

0

Một cách tương đối chậm là gọi lại lệnh trước bằng và thay thế lệnh trước bằng lệnh mới hơn.


Tôi hy vọng cho một cái gì đó nhanh hơn :)
badp
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.