現在のシェルセッションでスクリプトがすでに実行されていることを確認してください。

現在のシェルセッションでスクリプトがすでに実行されていることを確認してください。

引数なしで起動すると、インタラクティブスクリプトがあり、現在のシェルセッションで最初に実行されたときにASCIIアートのロゴを印刷したいと思います。何とか検知できますか?

ヘルパーファイルを作成せずにこれを実行したいことに言及するのを忘れました。シェル内で検出できますか?いくつかのプロセスログがありますか?

ベストアンサー1

私は2つの方法を考えることができます:


まず、スクリプトは名前に親シェルのPIDを含むファイルを生成しようとします。

#!/usr/bin/env bash
already_run_file=/tmp/${0##*/}.$PPID
if [[ ! -f $already_run_file ]]; then
    echo "ascii art"
    touch "$already_run_file"
fi
...

欠点:これらのファイルは何とかクリーンアップする必要があります。


2: スクリプトのラッパー関数を作成します。プログラムが呼び出されると仮定し、myscript環境変数が存在しない場合は、プログラム呼び出しに「-A」オプションを追加します。

myscript() {
    if [[ ! -v MYSCRIPT_HAS_RUN ]]; then
        export MYSCRIPT_HAS_RUN=$(printf '%(%s)T' -1)  # timestamp
        set -- -A "$@"
    fi
    command myscript "$@"
}

そして次に追加してくださいmyscript

while getopts :A opt; do
    [[ $opt == A ]] && echo "$ascii_art"
done
shift $((OPTIND-1))

または、関数からASCIIアートを印刷します。

おすすめ記事