オープン端末でノーチラスで起動したスクリプトを実行する

オープン端末でノーチラスで起動したスクリプトを実行する

スクリプトには、デフォルトでユーザーが読み取る必要がある出力があります。私はこれについて考えています:

#!/bin/bash

#cd to the script dir if executed from outside
SCRIPT_PATH=$(dirname "$(readlink -f "$0")")
cd "$SCRIPT_PATH"
if [ ! -t 1 ]; then #not from terminal
    SCRIPT=$(basename "$(readlink -f "$0")")
    x-terminal-emulator --profile "$USER" --working-directory "$SCRIPT_PATH" -e "./$SCRIPT" &
    exit 0
fi

echo "output"

#keep terminal open
bash

しかし、問題があります。新しい端末(ノーチラスで実行されている場合、pgrepはbashプロセスが1つしかないことを意味します)または「古い」端末(すでに開いている端末で実行されている場合はpgrepは意味)のウィンドウを閉じようとすると問題があります。二つbashプロセス)、「この端末でまだ実行中のプロセスがあります。端末を閉じるとプロセスは終了します。」

私は完全な解決策を探しています。オープンターミナルで実行でき、ノーチラスまたは他のファイルマネージャで実行でき、常にユーザーが出力を読み取ることを許可し、終了時にプロセスを中断することなく、誤ってユーザーに警告ウィンドウを閉じます。

コンソールを表示する「プロセス」が最後の行であると確信していますbashが、bashはスクリプトがノーチラスで実行されている場合にエコーを見ることができる唯一のものです。

ベストアンサー1

わずかに改善:trap終了時にメッセージを表示するために使用されます。

# some scripts like are meant to be run by clicking on
# them in the file manager.  This function runs the script in an X
# terminal if it isn't in a terminal already.
run_in_terminal() {
    # run in a new terminal if not already
    if [ ! "${RUNNING_IN_TERMINAL:-}" -a ! -t 1 -a "${DISPLAY:-}" ]; then
        RUNNING_IN_TERMINAL=1 exec x-terminal-emulator -e "$@"
    fi

    # wait for prompt to close the terminal
    if [ "${RUNNING_IN_TERMINAL:-}" ]; then
        exit_prompt() {
            echo
            read -p "Finished.  Press any key to close..." -n 1
        }
        trap exit_prompt EXIT 
    fi
}

run_in_terminal "$0" "$@"

おすすめ記事