Exec は、プリセットされたスクリプト出力中に一部の Bash 関数と変数の値を更新しません。

Exec は、プリセットされたスクリプト出力中に一部の Bash 関数と変数の値を更新しません。

私はBashにメッセージを記録し、コンテキストを提供するのに役立ついくつかの有用な情報をログメッセージに追加します。しかし、最終出力では、ほとんどの変数と関数は初期値のみを使用し、毎回更新されないようです。

私はそれを次のコードにまとめようとしています。

#!/bin/bash

# Define a timestamp function
function timestamp() {
    date +"%Y-%m-%d %H:%M:%S" # current time
    }

# Define variable
a1="No"
# Function to check variable value
function var_func() {
    echo "${a1}"
    }

# File to record log messages in
log_file="$(pwd)/output.csv" # log file for this script

# Clear log if existing file and send first log msg
echo "Script Initializing" > >(while IFS= read -r line;
            do printf '%s, %s, %s, %s\n' "$(timestamp)" "$(pwd)" "${a1}" "${line}";
            done > "${log_file}")

# Code to execute on future messages
exec >> >(while IFS= read -r line;
            do printf '%s, %s, %s, %s\n' "$(timestamp)" "$(pwd)" "${a1}" "${line}";
            done > >(tee -a -i "${log_file}")) 2>&1

echo "a1=${a1} and dir=$(pwd)" 

a1="Yes"
if [ ! -d "$(pwd)/test" ]; then
    mkdir "$(pwd)/test"
fi
cd "$(pwd)/test"

echo "a1=${a1} and dir=$(pwd)"

私が得た結果は次のとおりです。

2021-06-27 17:38:24, .../Help, No, Script Initializing
2021-06-27 17:38:24, .../Help, No, a1=No and dir=.../Help
2021-06-27 17:38:24, .../Help, No, a1=Yes and dir=.../Help

予想される出力は次のとおりです。

2021-06-27 17:38:24, .../Help, No, Script Initializing
2021-06-27 17:38:24, .../Help, No, a1=No and dir=.../Help
2021-06-27 17:38:24, .../Help/test, Yes, a1=Yes and dir=.../Help/test

つまり、このコマンドは、exec呼び出されたときにのみtimestampsum値を更新するようですline。なぜこれらの更新がpwd行われ、a1初期値を再利用するのか理解できません。

私がここで何を見逃しているのでしょうか?より便利な詳細も提供できる場合はお知らせください。

ありがとうございます!

ありがとう、

実験的

ベストアンサー1

おすすめ記事