Запустите ту же команду снова, но как root

У вас есть два варианта:

1.) Установите рабочий каталог в файле .desktop в расположение .jar

2.) Используйте полные пути в вашем Bash скрипт (как и вы)

1
задан 13 June 2014 в 19:29

9 ответов

Ответ: вы сразу вводите sudo !!, чтобы повторить предыдущая команда с эскалированными привилегиями.

edit: Изображение найдено через reddit, и это пародия на оригинальный комикс xkcd Рэндалла Мунро.

61
ответ дан 24 May 2018 в 21:43
  • 1
    пожалуйста, не делайте про-или против разговора здесь в комментариях. Если вы хотите обсудить достоинства или иным образом, пожалуйста, используйте Meta. Благодарю. – fossfreedom♦ 28 May 2013 в 22:42

Вы можете попробовать стрелку вверх для прокрутки старых команд и переписать / изменить их и добавить sudo перед ними. (кнопка home над клавишами со стрелками устанавливает положение в начало.)

Мне не нравится идея sudo !!, потому что иногда вы добавляете другую команду между ними и больше не помните. [!d1 ]

17
ответ дан 24 May 2018 в 21:43
  • 1
    К счастью, когда вы sudo !!, оболочка будет расширяться !!, чтобы вы могли видеть, какую команду он пытается запустить. Таким образом, может закончиться раздражение, чтобы нажать Ctrl-C и найти нужную команду, но она по крайней мере не заставит вас врасплох. – Reid 28 May 2013 в 02:58
  • 2
    @Reid Он не будет расширяться до после , если вы нажмете enter, и если вы находитесь в этом окне, где вам больше не нужно вводить пароль, он будет работать без подтверждения. +1 к использованию истории вместо слепого использования !! – Izkata 28 May 2013 в 06:33
  • 3
    @Izkata: Я полагаю, это правда. Я использую zsh, поэтому я просто набираю sudo !!<TAB>, а для меня автокомплекты !!. Bash может расширять историю с помощью M-^ (для меня, alt + shift + 6), но это менее свободно (вы можете восстановить это, хотя). Существует также shopt -s histverify, что делает его таким, что, когда вы используете расширение истории и нажмите enter, вместо этого вы получите еще одну строку подсказки с расширением, которое позволит вам увидеть / отредактировать его. – Reid 28 May 2013 в 06:46
  • 4
    Я думал больше о ситуации, когда я набрал команду, команда вернула это разрешение, и я знаю, что хочу снова запустить эту ту же команду, но как sudo, процесс нажатия, домой, набрав sudo и чувствую много медленнее для меня. Это то, как я делаю это навсегда, и это просто неэффективно. – Trufa 28 May 2013 в 14:03
  • 5
    @Reid: shopt -s histverify не поможет ни одному биту. Большинство людей привыкнут дважды бить Enter. В этот момент они все еще слишком поздно, чтобы проверить, что произошло. – Frank Kusters 30 May 2013 в 14:29

Я просто добавлю альтернативу: так же коротко, как набрав 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» как один. ..), но добавив «стрелку вверх», вы можете сделать это в зависимости от того, какая команда находится в вашей истории.

12
ответ дан 24 May 2018 в 21:43
  • 1
    ctrl + A - из привязок emacs, вы также можете использовать привязки vi (set -o vi). Затем вы можете Escape (перейти в командный режим), а затем «I» (капитал «i», вставить в начале строки). – Gerhard Burger 30 May 2013 в 15:31
  • 2
    @GerhardBurger: Я знаю, но, что странно, я люблю vi (особенно vim) для многострочного редактирования документов, но я предпочитаю привязку emacs в оболочке (нужно переключиться с команды на редактирование режим в оболочке действительно не имеет смысла, imo и ярлыки emacs вполне достаточны для повседневного использования, даже если они менее мощные) – Olivier Dulac 30 May 2013 в 15:54
  • 3
    Правда, я добавил его только для полноты, для меня это одно и то же, однако я нахожу поиск с «/» очень удобным;) – Gerhard Burger 30 May 2013 в 16:01
  • 4
    @GerhardBurger: о режиме vi "/", регулярном (привязка emacs) bash также очень удобный способ найти предыдущие команды, набрав несколько букв, затем 'ctrl + r', пока вы его не найдете – Olivier Dulac 13 June 2013 в 13:27

Есть несколько способов сделать это

Просто введите команду еще раз, добавив sudo перед командой. Нажмите стрелку вверх, чтобы получить последнюю команду, и поставьте sudo перед ней. Введите sudo !!

!! расширится до последней введенной команды. Вы можете делать похожие вещи с другими вещами с историей командной строки, см. Здесь

7
ответ дан 24 May 2018 в 21:43

Этот вопрос можно было бы обобщить на «Запустить ту же команду, но с некоторой модификацией», поскольку одно из блестящих дизайнерских решений в Unix - это то, что реализовано один раз в оболочке, можно использовать любой командой, вызываемой из оболочки .

Другими словами, этот трюк не применяется только к sudo:

Повторить предыдущую команду как суперпользователь (sudo !!) Повторить предыдущую команду и время ее ( time !!) Повторите предыдущую команду с другой средой (env A=b B=z !!) Повторите предыдущую команду (!!)

Расширение истории (также известное как замена истории) - это просто функция оболочки, чтобы повторять предыдущие команды проще (с меньшими нажатиями клавиш). Проверьте страницу man для оболочки 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) является вашим другом. [!d15 ]

6
ответ дан 24 May 2018 в 21:43
  • 1
    блестящий! это должен быть принятый ответ. – Eliran Malka 14 June 2013 в 16:44

Я использую 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

К сожалению, я не мог " t отслеживать способ сделать то же самое в bash.

5
ответ дан 24 May 2018 в 21:43
  • 1
    Вы можете легко сделать то же самое в Bash с помощью GNU Readline: добавить к вашему ~/.inputrc "\es":"\C-asudo ", и вы перейдете к началу длинной строки и sudo будет вставлен в начале строки при нажатии alt-s. Перезагрузите терминал или перечитайте ~/.inputrc, чтобы он работал. – user 28 May 2013 в 22:25
  • 2
    Вы можете легко сделать то же самое в Bash с помощью GNU Readline: добавить к вашему ~/.inputrc "\es":"\C-asudo ", и вы перейдете к началу длинной строки и sudo будет вставлен в начале строки при нажатии alt-s. Перезагрузите терминал или перечитайте ~/.inputrc, чтобы он работал. – user 28 May 2013 в 22:25
  • 3
    Вы можете легко сделать то же самое в Bash с помощью GNU Readline: добавить к вашему ~/.inputrc "\es":"\C-asudo ", и вы перейдете к началу длинной строки и sudo будет вставлен в начале строки при нажатии alt-s. Перезагрузите терминал или перечитайте ~/.inputrc, чтобы он работал. – user 28 May 2013 в 22:25
  • 4
    Вы можете легко сделать то же самое в Bash с помощью GNU Readline: добавить к вашему ~/.inputrc "\es":"\C-asudo ", и вы перейдете к началу длинной строки и sudo будет вставлен в начале строки при нажатии alt-s. Перезагрузите терминал или перечитайте ~/.inputrc, чтобы он работал. – user 28 May 2013 в 22:25
  • 5
    Вы можете легко сделать то же самое в Bash с помощью GNU Readline: добавить к вашему ~/.inputrc "\es":"\C-asudo ", и вы перейдете к началу длинной строки и sudo будет вставлен в начале строки при нажатии alt-s. Перезагрузите терминал или перечитайте ~/.inputrc, чтобы он работал. – user 28 May 2013 в 22:25
  • 6
    Вы можете легко сделать то же самое в Bash с помощью GNU Readline: добавить к вашему ~/.inputrc "\es":"\C-asudo ", и вы перейдете к началу длинной строки и sudo будет вставлен в начале строки при нажатии alt-s. Перезагрузите терминал или перечитайте ~/.inputrc, чтобы он работал. – user 28 May 2013 в 22:25
su -c "!!"

Если у вас нет прав на root, программа sudo или sudo не установлена ​​в системе.

1
ответ дан 24 May 2018 в 21:43

Способ, которым я это предпочитаю:

Клавиша со стрелкой вверх «sudo» Введите

Но может быть проще просто сделать «sudo !!», это зависит от вас.

1
ответ дан 24 May 2018 в 21:43

Если вы хотите сделать это в псевдониме, вы должны использовать alias redo='sudo $(history -p !!)' по какой-либо причине.

1
ответ дан 24 May 2018 в 21:43

Другие вопросы по тегам:

Похожие вопросы: