Избегайте запуска нескольких программ [закрыто]

С GNU sed 4.2. 2, вы можете использовать простой sed скрипт, например, следующий:

sed 's/\([0-9.]\+\) \([0-9.]\+\)/[\2,\1]/g;s/;/,/g' < input.csv > output.csv

В нем нужны обратные слеши для скобок и + в шаблоне совпадения (а также цифры в замене), чтобы sed рассматривал их как метасимволы.

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

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

1
23.07.2016, 02:29
1 ответ

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

I have:

lonew:

#!/bin/sh -e
#lastof or new -- try lastof and give me a new instance if it failed
cmd=$1; shift
lastof "$cmd" || exec "$cmd" "$@"

lastof:

#!/bin/sh -e
#give me the last used instance of the GUI app matching $@

results=$(xdotool search "$@")
result=$(echo "$results" | 
    while read -r id; do echo "$(xprop -id $id '_NET_WM_USER_TIME')" "$id"; done | 
    sed -n 's/.*= //p' |sort -n |
    tail -1| cut -d\  -f2
)
[ -n "$result" ] || result=$(echo "$results" | tail -1)
exec xdotool windowactivate "$result"

Для примера, мои настройки ярлыка для запуска эмулятора терминала:

Ctrl+Alt+K : lonew konsole
Ctrl+Shift+Alt+K :  konsole #force a new instance

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


Зависимости: xprop, xdotool

3
27.01.2020, 23:25

Теги

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