Tôi có thể sử dụng '!!' trong bí danh hoặc tập lệnh?


10

Trong Terminal tôi có thể sử dụng !!nó sẽ tham chiếu lệnh trước đó của tôi.
Có thể sử dụng điều này trong một bí danh? Tôi đã thử nó, nhưng những gì xảy ra là dấu chấm than kép được hiểu theo nghĩa đen.

Những gì tôi muốn có thể là:

  1. Tôi nhập một số lệnh
  2. Tôi nhập một bí danh sẽ bao gồm những gì đã được nhập trong bước 1

Nếu có một giải pháp sử dụng các kịch bản cũng được chấp nhận.


mục tiêu chính của bạn là gì? thêm nhiều tùy chọn cho lệnh cuối cùng?
Sergiy Kolodyazhnyy

Không có mục tiêu của tôi là nhanh chóng gõ một lệnh dài mà tôi thường sử dụng. Ở giữa của nó là một chuỗi dài thường là lệnh trước đó
Ludwig Magnusson

Có vẻ như bạn chỉ muốn ra fclệnh để nó mở trình soạn thảo văn bản, vì đó là cách dễ nhất để chỉnh sửa các lệnh dài. Hãy để tôi thêm nó vào bài viết của tôi. Ngoài ra, có lẽ bạn có thể cung cấp một ví dụ về lệnh?
Sergiy Kolodyazhnyy

Đã thêm một chỉnh sửa vào bài viết của tôi
Sergiy Kolodyazhnyy

Câu trả lời:


11

Lệnh liệt kê lệnh thực thi cuối cùng là fc -nl -1. Sử dụng thay thế đầu ra, chúng ta có thể thêm nhiều tham số cho cùng một nội dung

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

Trích dẫn, tuy nhiên, có thể là một vấn đề với phương pháp này

Một tính năng rất hay fclà nếu bạn chỉ chạy fclệnh, nó sẽ mở trình soạn thảo văn bản được chỉ định trong FCEDITbiến (mà bạn có thể muốn lưu trữ ~/.bashrc) và nội dung của dòng sẽ là lệnh cuối cùng của bạn. Để bạn dễ dàng, tôi khuyên bạn nên sử dụng nanolàm trình soạn thảo văn bản của mình, nhưng nếu bạn biết vim - thậm chí còn tốt hơn.

Ví dụ, nếu tôi cần chỉnh sửa qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowdòng Huge thì sao? Nhưng với fc, tôi có thể mở vimvà chỉnh sửa /org/ayatana/bamf/matcher, lưu, thoát và nó sẽ chạy.


9

Bạn không thể sử dụng !!nhưng ...

Từ hướng dẫn :

Một bí danh hữu ích để sử dụng với lệnh fc là r='fc -s', để gõ 'r cc' chạy lệnh cuối cùng bắt đầu bằng cc và gõ 'r' thực hiện lại lệnh cuối cùng.


Vì vậy, điều này sẽ cho phép tôi thêm một cái gì đó vào đầu lệnh cuối cùng của tôi. Thế còn ở giữa nó?
Ludwig Magnusson

8

Nếu bạn khăng khăng sử dụng !!cú pháp mở rộng lịch sử thay vì fc(đã đề cập), có một cách.

Theo mặc định, historymở rộng bị vô hiệu hóa cho các phiên shell không tương tác, ví dụ như trong các tập lệnh.

Để cho phép mở rộng lịch sử trong các tập lệnh, trước tiên hãy bật các tùy chọn shell có liên quan:

set -o history 
set -o histexpand

set -o histexpandcó thể được viết là set -Hquá.

Bây giờ các hoạt động mở rộng lịch sử, ví dụ !!sẽ hoạt động bên trong tập lệnh.

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.