与直接从 shell 执行相比,bash 源命令在 WSL2 下悄然失败?

与直接从 shell 执行相比,bash 源命令在 WSL2 下悄然失败?

我有一个 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 提示符即可工作。

欢迎提出任何建议。

相关内容