Использовать команду “истории” для увольнения последней команды выполнения?

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

2
задан 14.10.2010, 14:07

3 ответа

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

8
ответ дан 08.12.2019, 04:36

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

От man bash:

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

3
ответ дан 08.12.2019, 04:36

Как Ignacio сказал, использовать !!, но если Вы настаиваете:

$(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
$ 
6
ответ дан 08.12.2019, 04:36

Теги

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