带有bash脚本的未绑定变量

k_m*_*hap 8 bash shell scripting

我在调试脚本时变得绝望,我使用了一些从我的高级同事那里推荐给我的结构,我不知道如何让它正常工作.

 #!/bin/bash -x
set -ueo pipefail
exec &>/tmp/dq.log
source ${BASH_SOURCE%/*}/env-prd.sh

times=${2:-1}
sleep=${3:-1}

name="all-dq_hourly"


fs_lock_file="/tmp/mwa/jobs/prd-${name}.lock"

( flock -n 200
    log="/var/log/mwa/prd/$(date +%Y-%m-%d)__${name}.log"
    for i in $(seq 1 $times); do
        if [[ ! -f /tmp/stop ]]; then
        couple commands

      fi
        sleep $sleep
    done

) 200>"$fs_lock_file" | tee -a $log

rm $fs_lock_file
Run Code Online (Sandbox Code Playgroud)

从高管中,我可以看到部件的未绑定变量存在问题tee -a $log,couple commands可以直接执行.我试图在日志路径中使用backtics,但没有任何好处.我怀疑fs_lock_file存在同样的问题,但我还没有先修复日志.
有人可以睁开眼睛告诉我我失踪了吗?我无法使脚本记录到指定的路径.

Mic*_*ros 5

您分配变量log一个内部子shell ( [...] )。该变量未绑定在该子外壳之外。

在这种情况下,最好只log在子shell外部进行设置,即将变量分配移到子shell块之前。

通常,在类似情况下,您可以尝试使用花括号(组命令语法{[...] 替换子外壳括号}

组命令在当前shell中执行。请注意,与subshel​​l语法相比,列表必须以换行符或分号终止,请参见bash(1)联机帮助页“列表”部分中的“复合命令”。

作为一般的最佳实践,设置变量名称,尤其是在脚本或函数开头的常量,有助于避免此类错误。