3
在調試我的腳本時,我變得絕望了,我使用了一些從我的高級同事推薦給我的構造,我不知道如何使它正常工作。無約束變量bash腳本
#!/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
部分未綁定變量的問題,couple commands
獲得好吧執行。我試圖在日誌路徑中使用backtics,但沒有任何好處。我懷疑與fs_lock_file相同的問題,但我還沒有先修復日誌記錄。
有人能睜開我的眼睛,告訴我我錯過了什麼嗎?我不能使腳本記錄到指定的路徑。
謝謝你,將它移到子shell的外面解決了未綁定變量的問題,但腳本仍然沒有記錄。它創建空的日誌文件並且不寫入它。我可以使用tee命令嗎?我是否需要將它添加到subshell中的每個命令(其中大約20個) –
也許你的'couple命令'只寫入stderr?嘗試重定向到stdout以及在'|之前使用'2>&1' tee'。 –
就是這樣,stdout什麼都沒產生,進度可以通過stderr來監控,謝謝 –