Bash скрипт ctrl+c ошибка

У меня есть файловая система журнала, которая переименовывает последний файл журнала с текущим временем, и я должен установить команду less, чтобы легко проверить файл журнала. Я могу выйти с меньшим количеством команд с помощью q, но я должен следовать последним входящим строкам, поэтому после нажатия shift+f q не работает, и мне нужно выйти с помощью ctrl+c.

Когда я нажимаю ctrl + c главный экран и процесс останавливается, но на экране терминала появляется ошибка, которую вы видите ниже

ошибка терминала

find /data/tomcat/logs/out.* -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " |xargs less

Я могу очистить ошибку с помощью перезагрузки, но это смешно использовать это так. Когда я искал в интернете, большинство людей объясняло это тем, что ctrl + c убивает основную команду, но скрипт не отвечает на SIGINT. Перепробовал многие из них, но не смог убить этот простой сценарий.

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

Я знаю, что было бы проще использовать logger rotate, чтобы переименовать старый файл и сохранить последний файл с тем же именем, но этого не произойдет.

1 ответ

Решение

Когда вы нажимаете Shift-F во время работы меньше, это переводит вас в режим следования. Нажмите Ctrl-C, чтобы выйти из этого режима, затем вы можете нажать Q, чтобы выйти.

Похоже, эхо терминала отключено, когда вы нарушаете свою команду. То же самое происходит, если вы запускаете stty -echo, Для сброса вашего терминала вы можете набрать stty sane, Вам придется печатать это вслепую, так как вы не сможете увидеть, что вы печатаете, но это должно сработать.

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

#!/bin/bash
find /data/tomcat/logs/out.* -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " |xargs less
stty sane
Другие вопросы по тегам