Chamando o clipit dentro de um script de shell

0

Estou tentando iniciar clipit de dentro de um script usando i3wm e polybar . Espero que ele reinicie o polybar e inicie todos os programas que eu queria se eles ainda não estivessem rodando quando eu recarregar o i3, mas clipit se recusa a lançar a menos que eu digite manualmente no terminal

#!/usr/bin/env bash

# Terminate already running bar instances
killall -q polybar

echo 'Launching polybar...'
MONITOR=HDMI1 polybar default &

sleep 2

# Start applets if they're not running
for arg in "dunst" "clipit" "wpa_gui -qt"
do
    if ! ps ax | grep -v grep | grep -io "$arg"
    then
        echo "Launching $arg"
        exec $arg &
    fi
done

echo 'Polybar launched'
exit 0

Eu também tentei simplesmente colocar exec clipit em outro arquivo, sem sucesso. Não há erros ao executá-lo. Anteriormente, eu usava xfce4-clipman e funcionava bem, a única razão pela qual eu troquei é porque clipman estava truncando meu histórico toda vez que eu saía do i3.

Algum conselho?

    
por Clara 22.09.2018 / 12:39

1 resposta

0

No seu código, o primeiro comando killall -q polybar matará o polybar e depois dormirá por dois segundos.

killall é extremamente poderoso e seu desempenho é imprevisível, o que significa que não podemos prever quanto tempo levará para terminar completamente um processo e seus filhos.

De acordo com o homem : killall é uma ferramenta que fornece uma maneira de matar um processo pelo seu nome, ele envia um sinal para um processo pelo seu nome para finalizá-lo.

Each signal has a current disposition, which determines how the process behaves when it is delivered the signal.

Então você precisa controlar o desempenho de killall .

Eu acho que seu código se beneficiaria de algumas revisões. Por exemplo, o código deve esperar até que o processo de abate esteja completamente finalizado. Você pode adicionar um linear após killall -q polybar . Dessa forma, o código aguardará até que os processos tenham sido encerrados:

#!/usr/bin/env bash

# Terminate already running bar instances
killall -q polybar

# Wait until polybar have been completely shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 2; done

echo 'Launching polybar...'
MONITOR=HDMI1 polybar default &

# Start applets if they're not running
for arg in "dunst" "clipit" "wpa_gui -qt"
do
    if ! ps ax | grep -v grep | grep -io "$arg"
    then
        echo "Launching $arg"
        exec $arg &
    fi
done

echo 'Polybar launched'
exit 0
    
por 22.09.2018 / 13:58