2

Как использовать команду "history" для запуска команды последнего запуска?

3 ответа3

8

Вы бы не. Вы бы использовали !! ,

6

Как сказал Игнасио, используйте !! , но если вы настаиваете:

$(history | sed '$d' | sed -n '$p' | cut -d ' ' -f 3-)

Объяснение:

  • $() выполняет вывод команды внутри
  • sed '$d' удаляет последнюю команду, то есть 2001 $(history | sed '$d' | sed -n '$p' | cut -d ' ' -f 3-)
  • sed -n '$p' печатает только последнюю строку, т.е. 2000 yourpreviouscommand
  • cut -d ' ' -f 3- удаляет первые три поля, разделенные пробелами, то есть <space>2000<space>

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

Изменить: Если вы хотите использовать history вместо !! потому что у используемой вами оболочки нет !! , не повезло тебе; history - это встроенная оболочка, а не программа. А у простых оболочек вряд ли будет, если их нет !! , Например, черта не:

imgx64@home:~$ dash
$ history
dash: history: not found
$ 
3

В Bash команда fc может делать то, что вы ищете.

От man bash:

...
Во второй форме команда повторяется после замены каждого экземпляра pat на rep. Полезный псевдоним для использования с этим - r="fc -s", так что при наборе r cc запускается последняя команда, начинающаяся с cc а при наборе r повторно выполняется последняя команда.
...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .