Поскольку у вас уже есть возможность приостановить работу приложения, вы можете просто выполнить поиск недавно измененные файлы журнала . Вы можете дополнительно ограничить этот набор либо числом, либо временем.
Вот несколько альтернативных решений, которые предполагают, что имена файлов журнала достаточно разумны.
Предполагается, что имена файлов журнала не содержат пробелов и что сообщение о сбое записано где-то в одном из последних нескольких (6) записанных файлов:
if grep -q "KEY" $ (ls -dt logs / * | head -6)
затем echo FOUND; else echo NOT FOUND
fi
Предполагается, что имена файлов журнала могут содержать пробелы, но сообщение о сбое записано в одном из последних нескольких (6) записанных файлов
ls -t журналы | голова -6 | (
while IFS = read -rf
do
grep -q "KEY" logs / "$ f" && break
done
exit 1
)
если [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; fi
Предполагается, что имена файлов журнала могут содержать пробелы, но сообщение о сбое записано в последней части (400 строк) одного из последних нескольких (6) записанных файлов
ls -t logs | голова -6 | (
в то время как IFS = read -rf
do
tail -n400 logs / "$ f" | grep -q "KEY" && break
done
}} выход 1
)
if [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; fi
Предполагается, что имена файлов журнала не содержат пробелов и что сообщение о сбое записано в один из файлов, записанных за последние несколько (5) минут
if grep -q "KEY" $ ( найти журналы -type f -min -5)
затем echo FOUND; else echo NOT FOUND
fi
Предполагается, что имена файлов журнала могут содержать пробелы, но сообщение о сбое записывается в один из файлов, записанных за последние несколько (5) минут
найти логи -тип ф -мин -5 | (
while IFS = read -rf
do
grep -q "KEY" "$ f" && break
done
exit 1 {{ 1}})
если [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; fi
Предполагается, что имена файлов журнала могут содержать пробелы, но что сообщение о сбое написано в последней части (400 строк) файлов, записанных за последние несколько (5) минут
найдите журналы - типа ф -мин -5 | (
while IFS = read -rf
do
tail -n400 "$ f" | grep -q "KEY" && break
done
) выход 1
)
if [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; фи
Мое решение (, используемое ежедневно ), заключается в использовании alias
для xdg-open
.
Просто наденьте это на~/.bashrc
:
alias open='xdg-open '
Затем закройте и перезапустите оболочку или source ~/.bashrc
.
Теперь с помощью этой команды можно открыть любой файл... от.png до.jpg, от.docx до.pdf и.txt.
Хотя люди часто называют xdg-open
эмуляцией функциональности open
, macOS open
немного отличается, потому что она 1. ничего не перенаправляет из stdout/stedrr и 2. отсоединяет все, что вы хотите запустить, из терминал (, что почти всегда требуется при запуске приложений с графическим интерфейсом, чтобы у вас не было терминалов)
Чтобы решить эту проблему, я придумал правильный эквивалент, используя некоторые стандартные инструменты GNU (синтаксис — fish shell, но преобразование в bash тривиально):
function open
for i in $argv
setsid nohup xdg-open $i > /dev/null 2> /dev/null
end
end
Добавлено:
Для тех, кто использует оболочку bash, вот функция:
open ()
{
for i in $*
do
setsid nohup xdg-open $i > /dev/null 2> /dev/null
done
}