Альтернатива стрелке вверх + Enter для запуска предыдущей команды? - PullRequest
5 голосов
/ 18 сентября 2010

Иногда мне приходится многократно запускать команду, например, чтобы увидеть, запущена ли служба, и становится утомительно отодвигать руки от моей обычной позиции ввода текста, чтобы повторно нажимать стрелки вверх и ввода. Есть ли способ выполнить предыдущую команду без клавиш «Стрелка вверх» и «Ввод», возможно, с помощью сложного сценария оболочки?

Я попробовал следующее, но это неудовлетворительно, потому что он не может выполнять псевдонимы, и это немного медленно.

history | tail -2 | head -1 | cut -d' ' -f4- | cat > prev_command.txt
sleep .01
chmod 777 prev_command.txt
eval prev_command.txt
rm prev_command.txt

В идеале у меня должен быть псевдоним этого сценария, чтобы я мог напечатать что-то вроде «prev» в командной строке и нажать Enter, чтобы снова запустить предыдущую команду.

Ответы [ 7 ]

18 голосов
/ 18 сентября 2010

В bash вы можете нажать ctrl p , чтобы перейти к предыдущей команде - это намного лучше, чем переходить к клавишам со стрелками.

Смотрите также: https://github.com/fliptheweb/bash-shortcuts-cheat-sheet/

7 голосов
/ 18 сентября 2010

Используйте

!!

для запуска предыдущей команды.

sudo !!

также работает, для записи.

4 голосов
/ 18 сентября 2010

Вместо многократного выполнения одной и той же команды, почему бы не watch вместо этого?watch будет многократно запускать указанную команду и отображать вывод в stdout, чтобы вы могли видеть его изменение со временем.

watchcommand

3 голосов
/ 18 сентября 2010

В bash:

$ help fc
fc: fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]
    Display or execute commands from the history list.

    fc is used to list or edit and re-execute commands from the history list.
    FIRST and LAST can be numbers specifying the range, or FIRST can be a
    string, which means the most recent command beginning with that
    string.

    Options:
      -e ENAME  select which editor to use.  Default is FCEDIT, then EDITOR,
            then vi
      -l    list lines instead of editing
      -n    omit line numbers when listing
      -r    reverse the order of the lines (newest listed first)

    With the `fc -s [pat=rep ...] [command]' format, COMMAND is
    re-executed after the substitution OLD=NEW is performed.

    A useful alias to use with this is r='fc -s', so that typing `r cc'
    runs the last command beginning with `cc' and typing `r' re-executes
    the last command.

    Exit Status:
    Returns success or status of executed command; non-zero if an error occurs.

Обратите внимание на предложение для псевдонима r;Я использую это часто.

3 голосов
/ 18 сентября 2010

Я часто использую функцию «расширения истории» в bash (обычно активируется с помощью cntl R ) - он интерактивно ищет в вашей истории предыдущее ближайшее совпадение.

См. Раздел руководства по bash Поиск команд в истории , а также Интерактивное использование истории .

2 голосов
/ 18 сентября 2010

Вы пользователь emacs или vi? Вы можете использовать

set -o vi 
set -o emacs

для установки сочетаний клавиш emacs или vi. Затем вы можете использовать привязки клавиш emacs или vi в bash. Я не знаю, должно ли это работать для других оболочек. Я считаю, что режим vi запускается в режиме вставки, поэтому вам нужно нажать esc, чтобы войти в командный режим. В режиме emacs (по умолчанию) вы можете использовать ctrl + p, а затем ctrl + j, чтобы перейти к предыдущей строке и выполнить возврат каретки.

В противном случае вы можете использовать! как кто-то другой предложил.

1 голос
/ 18 сентября 2010

В зависимости от того, какой терминал вы используете, я знаю, что во многих случаях F3 использовался в качестве опции для повторения, но это все еще выходит за пределы обычного диапазона для набора текста, если у вас нет специальной клавиатуры с более доступными функциональными клавишами.

Моя клавиатура делает функциональные клавиши легкодоступными, но я больше не занимаюсь командной строкой в ​​unix, поэтому я не смог бы точно сказать вам, возможно ли это по-прежнему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...