Как выполнить последовательные команды из истории?

в Linux можно использовать

  • cat /proc/meminfo видеть общую подкачку и бесплатную подкачку (весь Linux)
  • cat /proc/swaps видеть, какие устройства свопинга используются (весь Linux)
  • swapon -s видеть устройства свопинга и размеры (где swapon установлен),
  • vmstat для текущей статистики виртуальной памяти

в Mac OS X можно использовать

  • vm_stat видеть информацию о виртуальной памяти (подкачка)
  • ls -lh /private/var/vm/swapfile* видеть, сколько файлов подкачки используется.

в Солярисе можно использовать

  • swap -l видеть устройства/файлы подкачки и их размеры
  • swap -s видеть, что общее количество подкачивает размер, используемый и бесплатный
  • vmstat видеть статистику виртуальной памяти

В некоторых системах "виртуальная память" относится только к поддержанным диском запоминающим устройствам, и в других системах, как Солярис, Виртуальная память может относиться к любому адресному пространству пользовательского процесса, включая tmpfs файловые системы (как/tmp) и пространство общей памяти.

49
03.11.2014, 14:37
6 ответов

Если это относится к командам, выполненным просто недавно, более эффективный путь состоит в том, чтобы сослаться на них с отрицательными числами:

!-4; !-3; !-2; !-1

Кроме того, после того как Вы делаете это, Ваша последняя запись истории будет содержать целую цепочку команд, таким образом, можно будет повторить его с !!.


Править: Если Вы уже не имеете, знакомитесь с большой встроенной функцией fc, упомянутый Gilles. (Используйте help fc.) Оказывается, что можно также использовать отрицательные числа с ним, таким образом, Вы могли сделать то же как выше использования

eval "`fc -ln -4 -1`"

Это имеет один протест, хотя: после этого eval строка хранится в истории как последняя команда. Таким образом, при выполнении этого снова Вы попадете в цикл!

Более безопасный способ сделать это состоит в том, чтобы использовать значение по умолчанию fc режим работы: передача выбранного диапазона команд редактору и выполнения их, после того как Вы выходите от него. Попробуйте:

 fc -4 -1

Можно даже инвертировать порядок диапазона команд: fc -1 -4

48
27.01.2020, 19:33
  • 1
    я просто считал то, что я записал... LOL. На самом деле я не уверен в, повторно вызывают (повторно вызовите, возможно?), но благодарит говорить :) Я всегда ценю исправления. –  rozcietrzewiacz 16.11.2011, 21:38
  • 2
    Scrabblefinder.com говорит, повторно вызывают, допустимое слово скрэббла. Не может больше становиться категоричным, чем это. :) –  BentFX 16.11.2011, 21:47
  • 3
    С хорошим ответом как этот (+1), не имеет значения, как Вы записываете его; тем более, что никакая форма написания не обнаруживается в 3 главных английских словарях: Оксфорд, Кэмгридж, Merriam-Webster (я пошел бы для дефиса) –  Peter.O 17.11.2011, 06:55

Для просмотра диапазона команд в истории используют встроенное fc команда:

fc -ln 432 435

Выполнить их снова:

eval "$(fc -ln 432 435)"
34
27.01.2020, 19:33
  • 1
    Очень хороший. Мне любопытно хотя, почему man fc ничего не дает мне. Что делает fc поддержать? Что другие опции там? –  Eric Wilson 17.11.2011, 05:00
  • 2
    @Eric Wilson... вводят help fc... и также help help ....помощь: справка [-dms] [шаблон...] информация о Дисплее о встроенных командах. –  Peter.O 17.11.2011, 06:57
  • 3
    я просто возвратился сюда, ища Ваш ответ. Это действительно - встроенное великое! Особенно, когда Вы - его функциональность по умолчанию - вызов редактора для изменения диапазона команд, которые будут воспроизводиться. Спасибо, Gilles. –  rozcietrzewiacz 24.07.2012, 10:21
  • 4
    Без -l флаг, это выполнится без потребности в зле eval. –  Bernhard 09.12.2013, 16:59
  • 5
    @EricWilson поиск Google приводит меня к "Unix вкратце" книга, в которой говорится fc обозначает, "находят, что команда" или "фиксирует команду". –  Slothworks 20.10.2015, 08:49

Существует хороший альтернативный способ последовательного выполнения ряда команд из истории Bash:
вместо использования подстановки истории (! 432 или ! -4 ), вы можете искать в истории с помощью Ctrl + r , и как только вы найдете первую команду, которую хотите запустить, нажмите Ctrl + o ( operation-and-get-next ) вместо return key
Это запустит команду и предложить следующую из истории. Вы можете нажимать Ctrl + o сколько угодно раз и завершить последовательность либо return ] для последнего или Ctrl + c для остановки без запуска.

10
27.01.2020, 19:33

Para ejecutar los comandos inmediatamente en lugar de editarlos,aquí hay una versión sintácticamente más delgada de Giles responde usando eval:

fc -e: 432 435

El argumento de dos puntos para -e es bash noop, que tiene el efecto de omitir el paso "abrir en un editor" que desea fc. Además, ahora el (historial reciente )contendrá los comandos reales del historial, en lugar de la instrucción eval.

12
27.01.2020, 19:33

fcдля петли иxsel

Это хорошо работает, когда я хочу объединить и повторно -запустить последние n команд несколько раз:

fcn() (
  from="${1:-2}"
  to="${2:-1}"
  if [ "$from" -ne "$to" ]; then
    for i in `seq "$from" -1 "$(($to + 1))"`; do
      printf "$(fc -ln -${i} -${i}) && "
    done
  fi
  printf "$(fc -ln -${to} -${to})"
)

Тогда:

$ echo a
a
$ echo b
b
$ echo c
c
$ fcn 3 1 | xsel -b
$ # Paste.
$  echo a &&  echo b &&  echo c
a
b
c
$ # Paste again if you feel like it.
$  echo a &&  echo b &&  echo c
a
b
c

Или для более крупных команд, которые могут потребовать некоторого редактирования:

fcn 3 1 >cmds.sh
vi cmds.sh
bash cmds.sh
bash cmds.sh
0
27.01.2020, 19:33
fcn 3 1 >cmds.sh
vi cmds.sh
bash cmds.sh
bash c
-1
14.04.2020, 18:29

Теги

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