変数を使用するときにサブシェルのPIDを取得する

変数を使用するときにサブシェルのPIDを取得する

デフォルトでは、データベースからデータをインポートしている間に表示するプログレスホイールをスクリプトに追加します。

結果をエコーし​​、結果変数に結果を格納する汎用データベース関数を呼び出します。バックグラウンドに置いてPIDをインポートしてから、スピナースタンバイで使用する方法はありますか?

loading_wheel(){
local process_id="$1"

spin[0]="-"; spin[1]="\\"; spin[2]="|"; spin[3]="/"

echo -n "[ Working ] ${spin[0]}"
while kill -0 $process_id 2> /dev/null
do
    for i in "${spin[@]}"
    do
        echo -ne "\b$i"
        sleep 0.1
    done
    done
    echo ""
}

# This is the command I want to background and use whilst still populating the variable.
result=$(get_db_val "$conn" "select 'test' from dual;")

# An example that works but no variable or subshell.
sleep 10 & PID=$!

loading_wheel "$PID"

ベストアンサー1

foo=$(some_value_of_bar_that_takes_a_while) &;などの構成を使用してサブシェルの背景を指定し、その出力を信頼できる変数としてキャプチャすることはできません。この制限を解決する必要があります。簡潔さのために:

loading_wheel() {
    # is defined here
}
scratch=$(mktemp); trap "rm -f $scratch" EXIT
get_db_val "$conn" "select 'test' from dual;" > $scratch &
loading_wheel $!
result="$( cat scratch )"

おすすめ記事