Команда `open` для открытия файла в приложении

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

Вот несколько альтернативных решений, которые предполагают, что имена файлов журнала достаточно разумны.

  1. Предполагается, что имена файлов журнала не содержат пробелов и что сообщение о сбое записано где-то в одном из последних нескольких (6) записанных файлов:

     if grep -q "KEY" $ (ls -dt logs / * | head -6) 
    затем echo FOUND; else echo NOT FOUND 
    fi 
     
  2. Предполагается, что имена файлов журнала могут содержать пробелы, но сообщение о сбое записано в одном из последних нескольких (6) записанных файлов

     ls -t журналы | голова -6 | (
    while IFS = read -rf 
    do 
    grep -q "KEY" logs / "$ f" && break 
    done 
    exit 1 
    ) 
    если [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; fi 
     
  3. Предполагается, что имена файлов журнала могут содержать пробелы, но сообщение о сбое записано в последней части (400 строк) одного из последних нескольких (6) записанных файлов

     ls -t logs | голова -6 | (
    в то время как IFS = read -rf 
    do 
    tail -n400 logs / "$ f" | grep -q "KEY" && break 
    done 
     }} выход 1 
    ) 
    if [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; fi 
     
  4. Предполагается, что имена файлов журнала не содержат пробелов и что сообщение о сбое записано в один из файлов, записанных за последние несколько (5) минут

     if grep -q "KEY" $ ( найти журналы -type f -min -5) 
    затем echo FOUND; else echo NOT FOUND 
    fi 
     
  5. Предполагается, что имена файлов журнала могут содержать пробелы, но сообщение о сбое записывается в один из файлов, записанных за последние несколько (5) минут

     найти логи -тип ф -мин -5 | (
    while IFS = read -rf 
    do 
    grep -q "KEY" "$ f" && break 
    done 
    exit 1 {{ 1}}) 
    если [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; fi 
     
  6. Предполагается, что имена файлов журнала могут содержать пробелы, но что сообщение о сбое написано в последней части (400 строк) файлов, записанных за последние несколько (5) минут

     найдите журналы - типа ф -мин -5 | (
    while IFS = read -rf 
    do 
    tail -n400 "$ f" | grep -q "KEY" && break 
    done 
    ) выход 1 
    ) 
    if [[$? -экв 0]]; затем эхо НАЙДЕНО; иначе эхо НЕ НАЙДЕНО; фи 
     
11
13.04.2019, 09:30
2 ответа

Мое решение (, используемое ежедневно ), заключается в использовании aliasдля xdg-open.

Просто наденьте это на~/.bashrc:

alias open='xdg-open '

Затем закройте и перезапустите оболочку или source ~/.bashrc.

Теперь с помощью этой команды можно открыть любой файл... от.png до.jpg, от.docx до.pdf и.txt.

4
27.01.2020, 19:57

Хотя люди часто называют 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
}
4
27.01.2020, 19:57

Теги

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