Как я пропускаю специальные буферы при уничтожении текущего буфера?

Если Вы хотите, чтобы другая программа (база данных, и т.д.) использовала вывод Nmap, всегда используйте вывод XML (-oX). В зависимости от Ваших предпочтительных языков программирования часто будет библиотека синтаксического анализатора, уже записанная: Nmap::Parser для Perl, Nmap::Parser для Ruby, ndiff (идет с Nmap) для Python. Если действительно необходимо использовать конвейеры команд, существует несколько утилит XML, которые могли бы быть сделаны работать (XmlStarlet, кажется, довольно популярен).

В зависимости от Ваших потребностей Вы могли использовать существующий проект, который поддерживает импорт XML Nmap. Metasploit, Dradis и OpenVAS являются несколькими совсем другими инструментами, которые поддерживают импорт из Nmap и хранение в базе данных.

Даже если Вы настаиваете на том, чтобы использовать вывод "Grepable" (который удерживается от использования), я настоятельно рекомендовал бы использование реальных сценариев/языка программирования (Perl, Python, Ruby, и т.д.), чтобы сделать парсинг, специально для вещей как помещение даты на каждой строке или разделении круглых скобок. Вовлечение конвейеров команд Nmap обычно заканчивается как чудовища как это:

nmap -sn -oG - 192.168.0.50-100 | perl -lanE 'if(/initiated (.*?) as:/){$d=$1;$,=","}else{print@F[1,4],$d,$F[2]=~/\((.*)\)/ if/Status:/}'

2
16.08.2013, 16:15
1 ответ

Это должно работать:

(defvar no-kill-buffers
  '("*Messages*"
    ;; ...
    ))

(defadvice kill-buffer (around no-kill-some-buffers activate)
  (unless (member (buffer-name) no-kill-buffers)
    ad-do-it))

Причина Ваш совет не работал, состоит в том, что это было "после" совета означая это не работало за нормальным kill-buffer логика завершилась. (Это after в (after avoid-message-buffer-in-next-buffer).

around совет позволяет нам, Вы помещаете пользовательскую логику или прежде или после рекомендуемой команды и даже управляете, работает ли это вообще. ad-do-it символ - то, что говорит его, если и когда выполнить нормальное kill-buffer стандартная программа.

Править:

Перечитав Ваш вопрос, я думаю, что, возможно, неправильно понял его. Если бы Вы надеетесь пропускать специальный буфер, который был бы отображен после уничтожения буфера затем, Ваш подход в основном корректен. Вы активировали совет?

Можно или оценить (ad-activate 'avoid-messages-buffer-in-next-buffer) или включайте activate в конце списка аргументов к defadvice поскольку я сделал в своем примере.

2
27.01.2020, 22:14

Теги

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