Случайный 'нано SomeFile | uniq' представляет безразличную оболочку

Можно сделать это с довольно маленькой модификацией любого ответа от последнего вопроса:

rename s/ras\.// sw.ras.*

или

for file in sw.ras.*; do
    mv "$file" "${file/ras./}"
done

Объяснение:

rename a perl сценарий, который берет a perl регулярное выражение и список файлов, применяют regex к имени каждого файла в свою очередь и переименовывают каждый файл к результату применения regex. В нашем случае, ras подобран буквально и \. соответствует литералу . (как . один указывает на любой символ кроме новой строки), и он ничем заменяет это.

for цикл берет все файлы, которые запускаются с sw.ras. (стандарт окружает шарик), и циклы по ним. ${var/search/replace} поиски $var для search и заменяет первое вхождение replace, так ${file/ras./} возвраты $file с первым ras. удаленный. Команда таким образом переименовывает файл к тому же имени минус ras.. Обратите внимание на это с этим поиском и заменой, . взят буквально, не как специальный символ.

5
21.12.2012, 08:13
4 ответа

Как другие ответы уже объяснили, Ctrl+C не уничтожает Нано потому что вход nano все еще прибывает из терминала, и терминал тих nanoуправление терминалом, таким образом, Nano помещает терминал в режим без предварительной обработки, куда управляющие символы, такие как Ctrl+C передаются к программе и не прерываются терминалом, чтобы сгенерировать сигналы.

При прерывании терминалом Ctrl+C генерирует сигнал SIGINT. Если Вы знаете идентификатор процесса nano (можно узнать с ps u -C nano (Linux ps синтаксис) или pgrep nano или другая утилита списка процессов), можно отправить этот сигнал с kill -INT 12345 где 12345 PID. Однако SIGINT традиционно значит “возврат для основного цикла”, и Нано не выходит, когда он получает SIGINT. Вместо этого отправьте SIGTERM, что означает “оконечный корректно”; это - сигнал по умолчанию, таким образом, можно просто работать kill 12345. Другая возможность kill -HUP 12345; SIGHUP означает, что “Вы больше не имеете терминал, выходите корректно, если Вы не можете жить без”. Если все остальное перестало работать, отправьте SIGKILL (kill -KILL 12345, или заметно kill -9 12345), который закрывает программу, хочет ли она умереть или нет.

Много программ, включая Нано, распознают, что Ctrl+Z приостанавливает. Это - та же последовательность, которая отправляет сигнал SIGTSTP. Если программа распознает эту клавишу CTRL, Вы возвращаете приглашение оболочки, и так как программа становится фоновым заданием, можно легко уничтожить его с kill %% (который отправляет сигнал в задание, которое было в последний раз помещено в фон).

С Нано существует альтернативный путь: отправьте ему его последовательность клавиши выхода, т.е. Ctrl+X, сопровождаемые при необходимости N для “, не сохраняют”. Но как общий вопрос, помните это:

  1. Попробуйте Ctrl+Z, сопровождаемый kill %%, и если это не закрывает программу kill -9 %%.
  2. Если Ctrl+Z не работали, переключаются на другой терминал, узнают идентификатор процесса (можно использовать ps -t pts/42 перечислять процессы, работающие на терминале /dev/pts/42) и уничтожьте его.
4
27.01.2020, 20:32
  • 1
    Обратите внимание, что это поведение является определенным для системы. Например, в консоли Debian, Нано обрабатывает сигнал SIGTSTP также. –  Alex 22.03.2018, 02:39

Символ вертикальной черты отправляет ouput nano к входу uniq команда.

Однако nano все еще выполняет и получает Ваш ввод с клавиатуры. Это просто, что Вы не видите его ouput как uniq не будет ouput он быть результатами, пока это не будет видеть Конец Файла (это не важно для вопроса).

Когда Вы нажимаете ctrl-c это 'поймано' нано, но это не заставляет это выходить.

Способ выйти из нано состоит в том, чтобы нажать ctrl-x, однако nano не выйдет, если модификации были сделаны, например, при нажатии каких-либо других клавиш начиная с ввода. В этом случае нано предложит Вам со следующим:

Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?                                                                
 Y Yes
 N No           ^C Cancel

Нажатие 'n' ключа выйдет, не сохраняя изменения.

Возможно, что Вы поражаете несколько сочетаний клавиш прежде, чем понять, что Вы были в нано, в этом случае можно быть несколькими меню глубоко. К счастью в нано нажатии ctrl-x также выйдет из большинства меню (но не отменит вышеупомянутую подсказку), это означает нажимать ctrl-x многократно никогда не будет брать Вас еще дальше от выхода.

Если Вы 'захватываетесь' несколько меню 'глубоко', можно обычно выходить путем нажатия ctrl-x несколько раз, сопровождаемый n ключ. Если это не работает, который означает, что Вы нажали ctrl-x одно время слишком многие - просто нажимают ctrl-x еще раз, сопровождаемый n ключ - это будет всегда работать.

10
27.01.2020, 20:32
  • 1
    Хорошо объясненный. Ctrl+Z и kill %1 как предложено в комментарии к начальному вопросу @ire_and_curses не требуется. –  Nikos Alexandris 20.12.2012, 10:41
  • 2
    , я думаю, что ответ @Gilles' имеет право быть принятым - таким образом, я передам принятое состояние. Моя вина, я должен был дать больше времени прежде, чем принять ответ. –  Nikos Alexandris 21.12.2012, 08:11

Оболочка не принимает Вас Ctrl+C, nano делает. Программы могут определить пользовательское поведение для сигналов прерывания и nano одна такая программа. Видеть то, что пользовательское поведение открыто nano без перенаправления и отправляют ему a Ctrl+C.

2
27.01.2020, 20:32

Забастовка Ctrl+X.

Нано получает весь ввод с клавиатуры и в Нано Ctrl+C имеет совершенно другое значение, чем в оболочке. Если Вы выполняете a nano в отдельном окне можно легко видеть, какие ключи необходимо ввести в выход. Ctrl+X

2
27.01.2020, 20:32

Теги

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