我有一个 Bash 脚本,它评估 JSON 文件以设置环境变量并创建一个函数
该脚本在原生 Ubuntu(22.04LTS)下运行良好,但在 WSL2(Windows 11)下运行相同的脚本时,它无法创建环境变量,也无法使函数静默运行,没有任何错误消息。
但是,如果你将相关行复制粘贴到 WSL2 bash 提示符中,它就可以处理它们。
该脚本通过“.funcs.sh”调用,如下所示:
#!/bin/bash
. mode.sh
# load config JSON as env vars (export)
eval $(cat config.json | jq -r ".${MODE}"' | to_entries | .[] | "export " + .key + "=\"" + .value + "\""')
# DELIM is set here because it is static in daily_import_header.sql:
export "DELIM"=";"
# logging to graylog server
log() {
APPNAME="SPAR"
# assumes LOG_SERVER to be set by eval
# if [ "${LOG_SERVER}" eq "" ]; then
# LOG_SERVER="redacted"
# fi
if [ $# -eq 2 ]; then
PRI=$1
MSG=$2
elif [ $# -eq 1 ]; then
MSG=$1
PRI=INFO
else
echo "Usage: $0 [priority] <message>"
return 1
fi
logger -p ${PRI} -t ${APPNAME} -n $LOG_SERVER ${MSG}
}
在这种情况下,mode.sh 仅包含字符串:
export MODE=PROD
. funcs.sh
默默地不创建变量/函数
. mode.sh
工作(创建变量 MODE=PROD)
粘贴
eval $(cat config.json | jq -r ".${MODE}"' | to_entries | .[] | "export " + .key + "=\"" + .value + "\""')
运行“.mode.sh”(创建变量)后,相同的 bash 提示符即可工作。
欢迎提出任何建议。