Відповіді:
Найпростіший спосіб - запустити:
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 !!)'чомусь.
Як я вважаю за краще:
Але може бути простіше просто зробити "судо !!", це залежить від вас.