Копировать (только копировать, а не разрезать) в Nano?

Я предоставляю сценарий, который прослушивает сигналы dbus, что позволит вам реагировать быстрее, чем если бы вы проводили опрос на изменения в вашей текущей конфигурации сети. Это помогает в системах, где скрипты / etc / не выполняются, когда вы хотели бы их (например, в моей системе 14.04).

my enter / exit hooks.d не работает

[d3 ] NetworkManager запускает dhclient с флагом -sf /usr/lib/NetworkManager/nm-dhcp-client.action, который, как представляется, отменяет поведение обычного входа / выхода. Поведение по умолчанию с dhclient заключается в вызове скриптов в /etc/dhcp/dhclient-{enter,exit}-hooks.d. Это невозможно вызвать вообще в моей системе.

my enter / exit hooks.d не работает

Однако NM ссылается на другое набор скриптов, в /etc/NetworkManager/dispatcher.d, чтобы сообщать о различных событиях. На странице руководства NetworkManager (8) определяются действия dhcp4-change и dhcp6-change, которые, как представляется, делают именно то, что вы хотите. Несмотря на то, что говорит manpage, по крайней мере в моей системе задействованы только действия up и down. Я не могу заставить эти сценарии запускать что-либо еще. Таким образом, это не отличный способ контролировать изменения IP-адресов.

, поэтому, snoop непосредственно на dbus-сигналах, испускаемых NM

nm-dhcp-client.action (источник), из командной строки просто преобразует все переменные среды, установленные dhclient в сигнал dbus. Эти переменные среды определены в man dhclient-script (8). Особый интерес представляет $new_ip_address. Что вы могли бы сделать, как предложил @Bernhard, - следить за сигналом и действовать соответствующим образом на основе его содержимого.

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

#!/bin/bash -e

#
# This script listens for the org.freedesktop.nm_dhcp_client signal.
# The signal is emitted every time dhclient-script would execute.
# It has the same contents as the environment passed to
# dhclient-script (8). Refer to manpage for variables of interest.
#

# "org.freedesktop.nm_dhcp_client" is an undocumented signal name,
# as far as I could tell. it is emitted by nm-dhcp-client.action,
# which is from the NetworkManager package source code.
# 

# detail: todo cleanup subprocess on exit. if the parent exits, 
#       the subprocess will linger until it tries to print
#       at which point it will get SIGPIPE and clean itself.
#       trap on bash's EXIT signal to do proper cleanup.


mkfifo /tmp/monitor-nm-change

(
    dbus-monitor --system "type='signal',interface='org.freedesktop.nm_dhcp_client'"
) > /tmp/monitor-nm-change &

exec </tmp/monitor-nm-change
rm /tmp/monitor-nm-change

while read EVENT; do
    #change this condition to the event you're interested in
    if echo "$EVENT" | grep -q BOUND6; then
        # do something interesting
        echo "current ipv6 addresses:"
        ip addr show | grep inet6
    fi
done

Выход dbus-монитора не является простым для анализа в сценариях. Возможно, это проще запускать при наличии определенного ключевого слова (-ов), например. new_ip_address, а оттуда используют разные инструменты для получения измененной информации (например, ip или ifconfig).

# example output data from dbus-monitor for that signal
...
dict entry(
string "new_routers"
variant             array of bytes "192.168.2.11"
)
dict entry(
string "new_subnet_mask"
variant             array of bytes "255.255.255.0"
)
dict entry(
string "new_network_number"
variant             array of bytes "192.168.2.0"
)
dict entry(
string "new_ip_address"
variant             array of bytes "192.168.2.4"
)
dict entry(
string "pid"
variant             array of bytes "12114"
)
dict entry(
string "reason"
variant             array of bytes "REBOOT"
)
dict entry(
string "interface"
variant             array of bytes "eth0"
)
...

Дайте ему шанс!

1
задан 5 October 2016 в 09:25

6 ответов

Обходной путь: обрезать, затем разбить и снова обрести в том месте, где вы хотите скопировать текст.

unicorns
rainbows

line4

I Ctrl + K unicorns

rainbows

line4
[d4 ] I uncut Ctrl + U

unicorns
rainbows

line4

Я перемещаю курсор в конец и U + K снова [ ! d7]

unicorns
rainbows

line4
unicorns
22
ответ дан 23 May 2018 в 05:30

Да, копирование текста немного странно в nano и несколько запутывает из-за противоречивых отчетов в Интернете и отсутствия ясности (или здравого смысла ...) как в том, как оно было реализовано (IMHO), так и в официальных документах ...

В документах:

4.3 Текст Cutbuffer можно вырезать из файла по всей строке за раз, используя команду «Cut Text» (по умолчанию) связывание: ^ K). Линия разреза сохраняется в бункере. Последовательные штрихи ^ K добавят каждую линию разреза в этот буфер, но a ^ K после любого другого нажатия клавиши будет перезаписывать весь бубнер. Содержимое режущего буфера может быть вставлено обратно в файл командой «Uncut Text» (привязка по умолчанию по умолчанию: ^ U). Строку текста можно скопировать в режущий инструмент (без резки) с помощью команды «Копировать текст» (привязка по умолчанию по умолчанию: M-6).

Поскольку в основном вы используете CTRL + K для вырезания, CTRL + U для вставки, а линия вырезания остается в бункере, вы можете быстро вырезать и вставлять, а затем снова вставлять для достижения «.»

Но мне не нравится этот «обходной путь» ...

В последней части документов говорится, как копировать: используя CTRL [ ! d10] +6 (до вырезать ), а затем вставить с помощью K + U для вставки.

(Фактически на самом деле говорят « паста [ ! d27] ", что означает официальные документы , поскольку mook765 сказал:« Meta -key, который не существует »... и обычно это только 6 [!d23 ] на современных клавиатурах.)

Вы также можете выбрать несколько строк с помощью ALT + U и перемещать секцию с помощью клавиш со стрелками.

Надеюсь, что это поможет. [ ! d35]

3
ответ дан 23 May 2018 в 05:30

Обратите внимание, что это решение работает только в GUI-версиях Ubuntu, а не в интерфейсе TTY.

Я копирую текст в nano все время, просто выполняя CTRL + SHIFT + C на выбранном тексте, потому что это комбинация клавиш по умолчанию для копирования любого текста в терминал. Это относится и к нано. Это также можно найти в

Edit> Copy

3
ответ дан 23 May 2018 в 05:30
  • 1
    Хорошее обходное решение, но это не будет работать в TTY, только в терминалах GUI :). [F1] однако имеет свой собственный способ копирования уже, что не зависит от терминала – Sergiy Kolodyazhnyy 5 October 2016 в 00:56

Из man nano

When a more precise piece of text needs to be cut or copied, one can mark its start with ^6, move the cursor to its end (the marked text will be highlighted), and then use ^K to cut it, or M-6 to copy it to the cutbuffer.

M означает Meta -key, который не существует на всех клавиатурах, но на некоторых. На клавиатурах с клавишами Meta могут работать другие клавиши-модификаторы, такие как Alt или Esc. На моей машине я обнаружил, что комбинация Alt + 6 отлично работает.

2
ответ дан 23 May 2018 в 05:30

вы также можете сделать следующее:

nano -cm <text_to_edit> Поместите курсор, где вы хотите начать копирование, нажмите Shift + LeftClick и перетащите мышью текст, который вы хотите скопировать, нажмите Ctrl+Shift+C Поместите курсор, который вы хотите вставить в текст, нажмите Ctrl+Shift+V

Опции -c и -m, разработанные в man nano:

-c, --constantshow
    Constantly show the cursor position on the status bar.  Note that this over‐
    rides option

-m, --mouse
    Enable  mouse  support,  if  available for your system.  When enabled, mouse
    clicks can be used to place the cursor, set the mark (with a double  click),
    and  execute  shortcuts.  The mouse will work in the X Window System, and on
    the console when gpm is running.  Text can still be selected  through  drag‐
    ging by holding down the Shift key.
1
ответ дан 23 May 2018 в 05:30

Самый простой способ скопировать текст в nano - это выбрать текст, который вы хотите скопировать, с помощью мыши и щелкните его правой кнопкой мыши. Это приведет к появлению меню, в котором вы можете выбрать несколько вещей, которые одна из ведьм является копией, выберите эту опцию, и вы скопировали текст. Если вы хотите вставить текст, сделайте то же самое, но вместо этого выберите paste, и он вставляет текст.

0
ответ дан 23 May 2018 в 05:30
  • 1
    И как вы щелкаете правой кнопкой мыши выбранный текст в TTY? Не собираюсь там работать – Sergiy Kolodyazhnyy 5 October 2016 в 04:57

Другие вопросы по тегам:

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