Câu trả lời:
Cách đơn giản nhất là chạy:
sudo !!
Điều này sẽ chạy lệnh cuối cùng nhưng là siêu người dùng.
Nguồn .
!!
chạy lệnh trước đó của bạn theo lưu trong history
. Ngoài ra, làm !-1
, !-2
và như vậy thực hiện lệnh cuối cùng của bạn, lệnh cuối cùng thứ hai, v.v. Tiện dụng!
!<command>
sẽ thực hiện sự kiện cuối cùng từ ~/.bash_history
đó bắt đầu với<command>
!
thứ bash ngu ngốc này được sao chép từ đó tcsh
đã làm tôi khó chịu hơn bao giờ hết. Dấu ngoặc kép không bảo vệ khỏi sự giải thích của !
. $ foo "!bar"
-> !bar: event not found
.
Là một tài tài, hay nói, qua, qua, qua một khác, qua giữ,, qua một tài khác, qua giữ, qua, qua, qua, qua một khác, qua, khi khác mới, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng đăng, mới đăng cam cam
câu trả lời : bạn nhập sudo !!
thẳng sau đó để lặp lại lệnh trước đó với các đặc quyền leo thang.
chỉnh sửa: Hình ảnh được tìm thấy qua reddit , và nó nhại lại truyện tranh xkcd gốc của Randall Munroe.
Bạn có thể thử phím mũi tên lên để cuộn qua các lệnh cũ của bạn và viết lại / thay đổi chúng và thêm sudo
vào phía trước chúng. (nút home phía trên các phím mũi tên sẽ đặt vị trí bắt đầu.)
Tôi không thích sudo !!
ý tưởng này, vì đôi khi bạn thêm một lệnh khác ở giữa và không nhớ nữa.
sudo !!
, trình bao sẽ mở rộng !!
để bạn có thể thấy lệnh nào nó đang cố chạy. Vì vậy, cuối cùng có thể sẽ khó chịu khi nhấn Ctrl-C và tìm đúng lệnh, nhưng ít nhất nó sẽ không khiến bạn bất ngờ.
!!
sudo !!<TAB>
và nó tự động hoàn thành !!
cho tôi. Bash có thể mở rộng lịch sử với M-^
(đối với tôi, alt + shift + 6), nhưng điều đó ít trôi chảy hơn (mặc dù bạn có thể làm lại điều này). Ngoài ra shopt -s histverify
, nó cũng làm cho nó khi bạn sử dụng mở rộng lịch sử và nhấn enter, thay vào đó, nó cung cấp cho bạn một dòng nhắc nhở khác với việc mở rộng được thực hiện để cho phép bạn xem / chỉnh sửa nó.
shopt -s histverify
sẽ không giúp một chút nào. Hầu hết mọi người sẽ quen với việc đánh Enter
hai lần. Tại thời điểm đó họ vẫn còn quá muộn để kiểm tra những gì đã xảy ra.
Tôi sẽ chỉ thêm một cách thay thế: ngắn như gõ sudo !!
và linh hoạt hơn:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
Đó chính xác là cùng số lượng tổ hợp phím (tôi tính "ctrl + A" là một ...), nhưng thêm "mũi tên lên" bạn có thể thực hiện bất kỳ lệnh nào trong lịch sử của mình.
set -o vi
). Sau đó, bạn có thể Thoát (chuyển sang chế độ lệnh) và sau đó 'I' (viết hoa 'i', chèn vào đầu dòng).
Có một số cách để làm điều này
Chỉ cần nhập lại lệnh thêm sudo
trước lệnh
Nhấn Up arrowđể nhận lệnh cuối cùng và đặt sudo
trước nó.
Đi vào sudo !!
Việc !!
mở rộng đến lệnh đã nhập cuối cùng. Bạn có thể làm những điều tương tự với những thứ khác với lịch sử dòng lệnh xem tại đây
Câu hỏi này có thể được khái quát thành " Chạy cùng một lệnh nhưng với một số sửa đổi ", vì một trong những quyết định thiết kế xuất sắc trong Unix, là những gì được thực hiện một lần trong shell, có thể được sử dụng bởi bất kỳ lệnh nào được gọi từ shell.
Nói cách khác, thủ thuật này không chỉ áp dụng cho sudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)Mở rộng lịch sử (còn được gọi là thay thế lịch sử) chỉ là một tính năng hệ vỏ để giúp việc lặp lại các lệnh trước đó dễ dàng hơn (với ít lần nhấn phím hơn). Kiểm tra trang vỏ của bạn cho history expansion
. Nó mô tả nhiều thủ thuật và lối tắt khác mà bạn có thể làm với lịch sử chẳng hạn:
Bạn có thể tham khảo các lệnh trước theo số:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Bạn có thể tham khảo các từ riêng lẻ trong các lệnh trước:
some-command !$ # run some-command on the last arg of previous command
Bạn cũng có thể tìm kiếm trước khi lặp lại:
!?awk # repeat the last command including the string 'awk'
Bạn có thể tìm kiếm lịch sử và thay thế một cái gì đó bằng một cái gì đó khác:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
Và nhiều hơn nữa, vì bạn có thể kết hợp lựa chọn lệnh, lựa chọn arg, tìm kiếm và thay thế một cách độc lập.
Trang người đàn ông của bạn (trong trường hợp này man bash
) là bạn của bạn.
Tôi sử dụng zsh thay vì bash và có cái này trong ~/.zshrc
đó, vì vậy hãy nhấn Alt+ Schèn sudo
vào đầu dòng lệnh:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
Thật không may, tôi không thể theo dõi một cách để làm điều tương tự trong bash.
Nếu bạn muốn làm điều đó trong một bí danh, bạn phải sử dụng alias redo='sudo $(history -p !!)'
vì một số lý do.
Cách tôi thích nó:
Nhưng nó có thể dễ dàng hơn để làm "sudo !!", tùy thuộc vào bạn.