쉘 스크립트 내에서 Clipit 호출하기

쉘 스크립트 내에서 Clipit 호출하기

clipit스크립트 내에서 사용하고 실행하려고 합니다 . Polybar를 다시 시작하고 원하는 모든 프로그램을 시작하고 싶지만(i3을 다시 로드할 때 아직 실행되고 있지 않은 경우) 터미널에 수동으로 입력하지 않으면 시작이 거부됩니다.i3wmpolybarclipit

#!/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

나는 또한 단순히 다른 파일을 넣어 보았지만 exec clipit아무 소용이 없었습니다. 실행시 오류가 없습니다. 이전에 사용해 본 적이 xfce4-clipman있는데 잘 작동했습니다. 전환한 유일한 이유는 clipman종료할 때마다 i3가 내 기록을 잘랐기 때문입니다.

어떤 제안이 있으십니까?

답변1

코드에서 첫 번째 명령은 killall -q polybarPolybar를 종료한 다음 2초 동안 절전 모드로 전환합니다.

killall이는 매우 강력하고 성능을 예측할 수 없습니다. 즉, 프로세스와 해당 하위 항목을 완전히 종료하는 데 걸리는 시간을 예측할 수 없습니다.

~에 따르면남성: killall프로세스를 종료하라는 신호를 이름으로 프로세스에 보내 이름으로 프로세스를 종료하는 방법을 제공하는 도구입니다.

각 신호에는 신호가 전달될 때 프로세스가 어떻게 작동하는지 결정하는 현재 구성이 있습니다.

그래서 성과를 통제해야 합니다 killall.

귀하의 코드를 약간 수정하면 도움이 될 것이라고 생각합니다. 예를 들어 코드는 종료 프로세스가 완전히 완료될 때까지 기다려야 합니다. 나중에 선형성을 추가할 수 있습니다 killall -q polybar. 이렇게 하면 코드는 프로세스가 닫힐 때까지 기다립니다.

#!/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

관련 정보