Это распознано BIOS? Это работает с Windows Live-CD? Согласно, например, эта страница или это сообщение в блоге на немецком языке это должно просто работать с Ubuntu 10.4.
Обратите внимание, что вывод истории может зависеть от окружения. На моей машине это смотрит как:
$ history | tail -1
2993 2012-08-13 17:42:17 echo "test"
и ни один из Ваших ответов не будет работать рядом.
Полезная опция fc
(обычно это встроено), который работает совершенно независимый от Ваших локальных настроек.
fc
имеет -n
опция, которая подавляет числа в выводе. Таким образом, Ваша команда была бы похожа:
fc -l -n
это производит только несколько последних команд.
Производить целую историю в этом использовании стиля:
fc -l -n 1
Производить без пробелов при начинании Вас может использовать sed для удаления их:
fc -l -n 1 | sed 's/^\s*//'
sed 's/^\s*//'
. Я только что добавил опцию с ним к моему ответу.
– rush
13.08.2012, 16:55
Альтернативное решение состоит в том, чтобы использовать метод выбора блока терминала, если это имеет его в наличии. Обычно Вы просто держите Ctrl прежде, чем выбрать с мышью. Это включит режим выбора блока во многих современных терминалах (определенно многочисленные терминалы на основе libvte).
Затем, просто перетащите и выпустите так свои покрытия блока выбора все строки (до полной ширины самой долгой команды), Вы хотите скопировать. Затем Вы просто вставляете его, и новые строки будут сохранены.
Это - простой прием, который я использую много раз в день при выполнении быстрой копии/вставок, для предотвращения вещей как снабженные префиксом номера строки, метки времени в файлах журнала, и т.д.
Обратите внимание, что это не будет работать, если одна из скопированных команд охватит больше чем одну строку!
В bash
:
history | tr -s ' ' | cut -d' ' -f3-
В zsh
и ksh
:
history -n
В tcsh
:
history -h
Также см. ответ порыва об использовании fc
.
history | tr -s ' ' | cut -d' ' -f5-
в моем случае для вырезания префиксов
– Fedir RYKHTIK
23.10.2014, 17:49
tl; dr: Используйте history -p \! - {4..1}
Если единственная причина, по которой вы хотите их скопировать, - это то, что вы можете запустить их снова, вы можете просто использовать раскрытие истории. (Запустите LESS = '+ / ^ history extension' man bash
, чтобы увидеть справочную страницу для этого.)
Например, скажем, я хочу повторно запустить последние четыре команды. Я могу просто ввести:
!-4; !-3; !-2; !!
Если я не совсем уверен, что это были последние четыре команды, и я хочу проверить, что это были за команды перед их запуском, я могу использовать модификатор p
, чтобы напечатать и добавить его в мою историю, не запуская его:
!-4; !-3; !-2; !!:p
(Достаточно поместить его в любое одно расширение истории; при этом ничего не запустится.)
Теперь, если оно меня устраивает, я просто нажимаю " стрелку вверх и нажмите «ввод».
Если я хочу сохранить команду в файл для дальнейшего использования, я использую параметр -p
для команды history
. Сначала я обычно получаю номер истории последней команды, например, запустив history | хвост
. Допустим, это выглядит так:
$ history | tail
1136 cd /tmp
1137 ls
1138 cd -
1139 pwd
1140 cp somefile ~-/
1141 ping somesite.com
1142 printf '%*.*s\n' 0 "$(tput cols)" "$(printf '%0.1s' -{1..$(tput cols)})"
1143 for ((i=1;i<=3;i++)); do awk -F: -vi="$i" '{if (NR != 1) {printf ":"} {printf "%s",$i}} END {printf "\n"}' input; done | column -t -s:
1144 cd ~/documents
1145 history | tail
Если я хочу сохранить длинную команду цикла for
(строка 1143) для дальнейшего использования, я могу легко сделать это, используя history -p
как следует:
$ history -p \!1143 >> my_list_of_one_liners.sh
Обратите внимание, что history -p
сам по себе не отображается в списке истории.
Также обратите внимание, что history -p
может принимать несколько аргументов и будет раскрывать каждый в отдельной строке. Так что на самом деле это лучший ответ на ваш вопрос, который я сейчас понял.
Запустите history -p \! - {4..1}
, и вы увидите, что последние четыре команды, которые вы выполнили, напечатаны на вашем терминале без предшествующих номеров, что идеально подходит для копирования. 4
можно заменить любым числом, которое вам нравится.
history | awk '{$1="";print}'
будет работать намного лучший ;) – rush 13.08.2012, 16:52awk
"ответ с этим, поскольку это - намного лучшее решение. Также я могу затем инвертировать свой downvote. Я не люблю вниз-голоса и использую их экономно. – Michael Durrant 13.08.2012, 17:01