Làm thế nào tôi có thể `bí danh sudo !!`?


50

Tôi đang cố gắng đặt bí danh cho sudo !!Bash. Tôi đã thử alias sbb='sudo !!', nhưng nó diễn giải theo nghĩa đen !!và chữ in

sudo: !!: command not found

Nếu tôi sử dụng dấu ngoặc kép, nó sẽ thay thế tiếng nổ kép trong chính chuỗi, vì vậy nó không hoạt động.

Có cách nào để làm cho công việc này? Hoặc một bí danh thay thế? `



Câu trả lời:


61

!!được mở rộng bằng bash khi bạn gõ nó. Nó không được mở rộng bằng cách thay thế bí danh.

Bạn có thể sử dụng tích historyhợp để thực hiện việc mở rộng:

alias sbb='sudo $(history -p !!)'

Nếu lệnh không chỉ là một lệnh đơn giản (ví dụ: nó chứa các chuyển hướng hoặc đường ống), bạn cần phải gọi một shell theo sudo:

alias sbb='sudo "$BASH" -c "$(history -p !!)"'

Có một cái cho tcsh?
mdpc

1
@mdpc: Tôi không sử dụng tcsh, nhưng tôi đã liếc nhìn man tcshvà phát hiện ra rằng nó thực hiện mở rộng lịch sử trong quá trình mở rộng bí danh "như thể lệnh ban đầu là dòng đầu vào trước đó." Hấp dẫn. Tuy nhiên, alias sbb 'sudo \!-2đã không hoạt động như mong đợi (nó thực sự thay thế mục nhập thứ hai trước đó); alias sbb 'sudo \!\!'đã làm việc như mong đợi (thay thế sbbcho !!); và cuối cùng hóa ra điều tôi muốn là alias sbb 'sudo \!-1'điều mà tôi mong đợi sẽ giống như vậy \!\!. (tcsh 6.17,06 (Astron) 2011-04-15) YMMV. Chúc may mắn.
rici

Cảm ơn! Bí danh này là tuyệt vời khi là quản trị viên, bạn quên đặt sudo trước lệnh của bạn.
mdpc

thay vì sbbtôi thích preaselà bí danh như được đề xuất bởi @jpschorr
rubo77

40

Thử:

alias sbb='sudo $(fc -ln -1)'

Tôi thực sự thích đặt tên nó là 'làm ơn':

alias please='sudo $(fc -ln -1)'

Thông tin: fclà một lệnh được xây dựng trong bash shell. liệt kê, chỉnh sửa và xem lại các lệnh trước đây được nhập vào trình bao tương tác.


13
pleasechắc chắn là con đường để đi!
Anto

hoạt động cho bash quá nên đã xóa nhận xét 'cho zsh'.
Michael Durrant

1
Hoạt động tốt trong zsh. fc là lệnh sử dụng. Cảm ơn
Frax

pleaselàm cho nó có cảm giác như thiết bị đầu cuối là một thực thể mà tôi phải tử tế để hoàn thành công việc. Tôi thích thứ gì đó mang lại cảm giác kiểm soát tốt hơn - như fuck;)
Przemek D

5

Bây giờ có một kho lưu trữ cho mục đích này trong GitHub, nó kiểm tra một cách kỳ diệu xem nó có cần quyền siêu người dùng hay không, cũng sửa các lỗi chính tả:

https://github.com/nvbn/thefuck


Tôi đã thử apt-get install thefuckcái nào tồn tại, nhưng nó không hoạt động trên Ubuntu 15.10 của tôi; (
rubo77

0

Điều này ban đầu được đăng tại câu hỏi này nhưng sau đó, đề nghị đăng ở đây.

Đây là cách bạn có thể sử dụng fchistoryvới bí danh cho !-những sự thay thế như thế. Giả sử nếu bạn muốn sử dụng !-n(trong đó n là chữ số cho lệnh cuối cùng thứ n được sử dụng), thì bạn có thể sử dụng fchistoryvới bí danh như sau:

  1. Sử dụng history:

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'

    Lưu ý: Ở đây !-nnên được đính kèm với 'hoặc ''.

  2. Sử dụng fc:

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'

    Lưu ý: đây 1 st và 2 nd -n được sử dụng để xác định phạm vi danh sách lịch sử.

Ở đây tôi đã sử dụng echo-ing trước khi thực hiện lệnh để chặt hạ như thế nào !-<n>.


Câu trả lời trước đã bao gồm history -pfc. Có gì mới ở đây không?
muru

Ok, cái gì vậy?
muru

Tôi thấy -ln -n -nrất khó hiểu; cũng là bit về 'hoặc ''(và cả bit về -<n>).
Scott

Tùy chọn 2. phải là một lỗi đánh máy, tôi nghĩ bạn muốn$(fc -ln -1)
cmcginty

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.