スクリプトには、デフォルトでユーザーが読み取る必要がある出力があります。私はこれについて考えています:
#!/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" "$@"