Ошибка ctrl + c сценария Bash

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

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

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

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

. Я могу сбросить ошибку с помощью сброса, но смешно использовать ее таким образом. As i search on internet most of people explained it as ctrl+c kills the main command but the script doesnt respond the SIGINT. Tried a lot of them but cannot succeded on killing this simple script.

And also unable to make aliases because some of the arguments gave error but it works perfectly fine when i run this command on terminal.

I know it would be easier to use logger rotate to rename the old file and keep the latest file with the same name but its not gonna happen.

-1
задан 23 November 2016 в 16:10
1 ответ

Когда вы нажимаете shiftt-F при меньших затратах, это переводит вас в следующий режим. Нажмите Ctrl-C для выхода из этого режима, затем вы можете нажать Q для выхода.

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

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

#!/bin/bash
find /data/tomcat/logs/out.* -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " |xargs less
stty sane
0
ответ дан 5 December 2019 в 20:27

Теги

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