Відповіді:
Найпростіший спосіб - запустити:
sudo !!
Це запустить останню команду, але як супер користувач.
Джерело .
!!
самостійно виконує попередню команду згідно зі збереженими в history
. Крім того, виконуючи !-1
, !-2
і так далі виконує останню команду, другу останню команду тощо. Зручно!
!<command>
виконаємо останню подію з ~/.bash_history
цього початку<command>
!
штучка, скопійована з tcsh
мене, накрутила мене більше разів, ніж це було корисно. Подвійні цитати не захищають від тлумачення !
. $ foo "!bar"
-> !bar: event not found
.
Сігналы абмеркавання
відповіді : ви вводите sudo !!
одразу після цього, щоб повторити попередню команду з нарощеними привілеями.
редагувати: Зображення знайдено через reddit , і це пародія на оригінальний комікс xkcd від Рендалла Манро.
Ви можете спробувати клавішу зі стрілкою вгору, щоб прокрутити старі команди та переписати / змінити їх та додати sudo
перед ними. (кнопка додому над клавішами зі стрілками встановить позицію на початку.)
Мені не подобається sudo !!
ідея, бо іноді ти додаєш ще одну команду між ними і більше не пам'ятаєш.
sudo !!
, оболонка розшириться, !!
щоб ви могли бачити, яку команду вона намагається запустити. Таким чином, це може дратувати натиснути Ctrl-C і знайти правильну команду, але це, принаймні, не позбавить вас зненацька.
!!
sudo !!<TAB>
і він автоматично завершується !!
для мене. Bash може розширити історію за допомогою M-^
(для мене, alt + shift + 6), але це менш вільно (хоч ви можете відновити це). Крім того shopt -s histverify
, це робить так, що коли ви використовуєте розширення історії та натискаєте клавішу Enter, вона натомість надає вам ще один рядок підказки із виконаним розширенням, яке дозволяє вам бачити / редагувати його.
shopt -s histverify
не допоможе жоден біт. Більшість людей звикне до удару Enter
двічі. У той момент вони все ще пізно, щоб перевірити, що сталося.
Я просто додам альтернативу: коротку, як набір тексту sudo !!
та гнучкішу:
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
Це точно така ж кількість натискань клавіш (я рахую "ctrl + A" як один ...), але додаючи "стрілку вгору", ви можете це робити за будь-якою командою в історії.
set -o vi
). Потім ви можете Escape (перейти до командного режиму), а потім 'I' (з великої літери 'i', вставити на початку рядка).
Є кілька способів зробити це
Просто введіть команду ще раз, додаючи sudo
перед командою
Натисніть, Up arrowщоб отримати останню команду, і поставте sudo
перед нею.
Введіть sudo !!
В !!
розростається до останньої введеної команди. Ви можете робити подібні речі з іншими речами з історії командного рядка, див. Тут
Це питання можна було б узагальнити до " Запустити одну команду, але з деякою модифікацією ", оскільки одне з блискучих дизайнерських рішень в Unix полягає в тому, що те, що реалізується один раз в оболонці, може бути використане будь-якою командою, що викликається з оболонки.
Іншими словами, ця хитрість не застосовується лише до sudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)Розширення історії (також відоме як заміна історії) - лише функція оболонки, щоб спростити повторення попередніх команд (з меншим натисканням клавіш). Перевірте свою сторінку "man shell" history expansion
. У ньому описано ще багато хитрощів та скорочень, які ви можете зробити з історією, наприклад:
Ви можете посилатися на попередні команди за номером:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Ви можете посилатися на окремі слова в попередніх командах:
some-command !$ # run some-command on the last arg of previous command
Ви також можете здійснити пошук перед повторенням:
!?awk # repeat the last command including the string 'awk'
Ви можете шукати історію та щось замінювати чимось іншим:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
І багато іншого, оскільки ви можете комбінувати вибір команд, арг-підбір, пошук та заміну самостійно.
Сторінка людини вашої оболонки (в даному випадку man bash
) - ваш друг.
Я використовую zsh замість bash і маю це у своєму ~/.zshrc
, тому натискаючи Alt+ Sвставки sudo
на початку командного рядка:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
На жаль, я не зміг знайти спосіб зробити те ж саме в баші.
Якщо ви хочете зробити це псевдонімом, вам доведеться скористатися alias redo='sudo $(history -p !!)'
чомусь.
Як я вважаю за краще:
Але може бути простіше просто зробити "судо !!", це залежить від вас.