Spusťte stejný příkaz znovu, ale jako root

91

Někdy při spuštění příkazu si nevšimuju, že jsem ji potřeboval spustit jako super uživatel, aby dostal dostatečné povolení.

Existuje způsob, jak znovu spustit stejný příkaz, ale jako super uživatel?

    
dané Trufa 27.05.2013 22:31

10 odpovědí

166

Nejjednodušší je spustit:

sudo !!

Spustí se poslední příkaz, ale jako super uživatel.

Zdroj .

    
odpověděl Trufa 27.05.2013 22:31
64

Odpověď: zadátesudo !! přímo potom, abyste zopakovali předchozí příkaz s eskalovanými oprávněními.

editovat: Obrázek byl nalezen prostřednictvím reddit a je to parodie komiku originálního xkcd od Randall Munroe.

    
odpověděl wim 30.05.2013 00:33
17

Můžete zkusit klávesu se šipkou nahoru, abyste procházeli starými příkazy a přepsali / změnili a přidali jste před nimi koeficientsudo. (domovské tlačítko nad šipkami nastaví pozici na začátek.)

Nelíbí se nápadsudo !!, protože někdy přidáte další příkaz mezi sebe a už si nepamatuji.

    
odpověděl Xylol 27.05.2013 23:31
12

Přidávám alternativu: jako krátkou jako typsudo !! a flexibilnější:

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

Je to přesně stejný počet klávesových zkratek (počítám "ctrl + A" jako jeden ...), ale přidáním "šipky nahoru" to můžete udělat na libovolném příkazu ve vaší historii.

    
odpověděl Olivier Dulac 28.05.2013 13:09
7

Existuje několik způsobů, jak to udělat

  • Jednoduše zadejte příkaz znovu přidáním příkazusudo před příkazem

  • Stiskněte klávesu šipka nahoru , abyste získali poslední příkaz a před něj vložtesudo.

  • Zadejtesudo !!

Příkaz!! se rozšiřuje na poslední zadaný příkaz. Můžete dělat podobné věci s jinými věcmi s historií příkazové řádky viz zde

    
odpověděl user162424 28.05.2013 11:22
6

Tato otázka mohla být zobecněna do " Spustit stejný příkaz, ale s nějakou modifikací ", jelikož jedním z brilantních návrhových rozhodnutí v Unixu je, že to, co je implementováno jednou v shellu, jakýkoli příkaz vyvolaný ze shellu.

Jinými slovy, tento trik neplatí jen nasudo:

  • Opakujte předchozí příkaz jako superuživatel (sudo !!)
  • Opakujte předchozí příkaz a čas (time !!)
  • Opakujte předchozí příkaz s jiným prostředím (env A=b B=z !!)
  • Opakujte předchozí příkaz (!!)

Rozšíření historie (známé také jako nahrazení historie) je pouze funkce shellu, která usnadňuje opakování předchozích příkazů (s menšími stisknutími kláves). Ověřte svou stránku s manžetou prohistory expansion. Popisuje mnoho dalších triků a zkratek, které můžete dělat například s historií:

Můžete se obrátit na předchozí příkazy podle čísla:

!55                 # repeat command number 55
!-1                 # repeat the previous command, alias for !!
!-2                 # repeat the command before the previous command

V předchozích příkazech můžete odkazovat na jednotlivé slova:

some-command !$     # run some-command on the last arg of previous command

Můžete také vyhledat před opakováním:

!?awk               # repeat the last command including the string 'awk'

Můžete vyhledávat historii a něco nahradit něčím jiným:

!?awk?:s/str1/str2/  # repeat previous command matching 'awk' replacing str1 by str2

A mnohem víc, protože můžete kombinovat výběr příkazů, arg-výběr, hledat a nahradit samostatně.

Man page of your shell (v tomto případěman bash) je vaším přítelem.

    
odpověděl arielf 31.05.2013 21:07
5

Používám zsh namísto bash a mám to v mém~/.zshrc, takže stisknutím Alt + S vložísudo na začátek příkazového řádku:

insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo

Bohužel se mi nedařilo najít způsob, jak dělat totéž v bash.

    
odpověděl Patches 28.05.2013 01:58
1

su -c "!!"

Pokud nemáte oprávnění být kořenem sudo nebo sudo, program nebyl nainstalován do systému.

    
odpověděl Achu 29.05.2013 06:37
1

Způsob, jakým to preferuji:

  • Šipka nahoru
  • Domovská stránka
  • "sudo"
  • Zadejte

Ale možná by bylo jednodušší udělat "sudo !!", je to na vás.

    
odpověděl Farid El Nasire 14.06.2013 16:22
1

Chcete-li to udělat v aliasu, musíte z nějakého důvodu použítalias redo='sudo $(history -p !!)'.

    
odpověděl Aaron Franke 07.07.2016 11:55