В Bash, fc
команда может сделать то, что Вы ищете.
От man bash
:
...
Во второй форме повторно выполняется команда после того, как каждый экземпляр кусочка заменяется представителем, который полезный псевдоним для использования с этимr="fc -s"
, так, чтобы вводr cc
выполняет последнее начало командыcc
и вводr
повторно выполняет последнюю команду.
...
Как 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
$