我在使用以下代码时遇到问题。 runFail没有被更改,最后无法访问,导致错误。
False
它在结尾处返回1而不是0,并在到达代码时通过,告诉我它失败了。
runFail=1
pylint_run(){
if [ ! -f "$root/$1/$2/__init__.py" ]; then
cd "$root/$1/$2" || exit
pylintOutput=$(find . -iname "*.py" -print0 | xargs -0 pylint)
else
pylintOutput=$(pylint "$root/$1/$2")
fi
echo "${pylintOutput}"
# This then scans for the line in the output containing the score
scoreLine=$(grep rated <<< "$pylintOutput")
IFS=" " read -r -a array <<< "$scoreLine"
# The score is the 6th column in that line
scoreVal=${array[6]}
# Snips the "out of ten" of the end
scoreVal=${scoreVal///10/}
# Sees if the pylint actually ran successfully and produced a score
if [ -z "$scoreVal" ]; then
echo "Pylint failed to run"
runFail=0
fi
# Checks if the score is good enough
# If not, it will say the score is too low and indicate a fail.
if (( $(echo "$scoreVal < 8" | bc -l) )); then
echo "Score is less than 8 for '$2': FAIL"
runFail=0
fi
echo "=================END OF TEST================"
}
# pylint_run [path/containing/scriptFolder] [scriptFolder]
# The tee command is then used to produce a report to be used as an
artifact
pylint_run "gocd-helper-scripts/gocdhelp/" "gocdhelp" | tee gocdhelp-
report.txt
pylint_run "metrics-gocd/" "metrics" | tee metrics-report.txt
echo $runFail
if [[ $runFail = 1 ]]; then
echo "Score is more than 8 for each tool: PASS"
exit 0
else
exit 1
fi
此处echo应打印0(当前打印1),因此应退出1.
如果您需要更多详细信息,请告诉我,我很困惑,并且问同事我的代码是什么我不知道,因为我在尝试同样的事情一个bash shell,它工作正常。
实际上,我所做的只是设置变量,创建一个函数来更改该变量,调用该函数并测试变量是否已更改。它显然可以改变变量,但却无法全局更改变量,即使它应该没问题。
与此类似:Value of global variable doesn't change in BASH
从功能运行中移除T形管解决了这个问题,但我很困惑为什么管道会以这种方式影响范围。
Bash版本是3.2.57,我在终端&#34; ./ pylint-checker.sh&#34;
中运行答案 0 :(得分:1)
你在管道中调用你的函数:
pylint_run "gocd-helper-scripts/gocdhelp/" "gocdhelp" | tee gocdhelp-report.txt
这意味着双方都在子shell中运行。 Subshell无法更改父环境的值,因此调用此方式的pylint_run
无法更改全局变量。
您可以使用重定向来实现相同的效果,而无需pylint_run过程的子shell,例如
pylint_run "gocd-helper-scripts/gocdhelp/" "gocdhelp" > >(tee gocdhelp-report.txt)
在进程替换shell中运行tee
并在父shell中保留pylint_run
,以便它可以修改这些变量。
答案 1 :(得分:0)
我正在使用
| tee filename.txt
我需要使用
> >(tee filename.txt)