我在调试脚本时变得绝望,我使用了一些从我的高级同事那里推荐给我的结构,我不知道如何让它正常工作.
#!/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
从高管中,我可以看到tee -a $log部分的未绑定变量存在问题,几个命令执行得很好.我试图在日志路径中使用backtics,但没有任何好处.我怀疑fs_lock_file存在同样的问题,但我还没有先修复日志.
有人可以睁开眼睛告诉我我失踪了吗?我无法使脚本记录到指定的路径.
您正在子shell([…])中分配变量日志.该变量不在子shell之外.
在这种情况下,最好只在子shell外部设置日志,即在子shell块之前移动变量赋值.
通常在类似的情况下,您可以尝试用花括号替换子shell括号(组命令语法){[…]}.
组命令在当前shell中执行.请注意,与子shell语法相反,列表必须以换行符或分号结束,请参阅bash(1)联机帮助页的“列表”部分中的“复合命令”.
作为一般的最佳实践,在脚本或函数的开头设置变量名称(尤其是常量)有助于避免此类错误.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。