envsubst与tee结合使用会随机产生一个空文件

问题描述 投票:0回答:1

我希望了解简单脚本中发生的事情,这似乎会产生随机结果。

我正在尝试做的事情:

  • 根据环境中定义的值替换现有文件中的变量。
  • 这是在带有bash脚本的Docker容器内完成的,该脚本运行命令:

    envsubst '$VAR1 $VAR2' < $FILE | tee $FILE


会发生什么:

  • 有时$FILE在命令前具有内容,但在命令后不包含任何内容。

如何重现问题:

  • Dockerfile:
FROM debian:stretch

RUN apt-get update -qy
RUN apt-get install -qy gettext

COPY main-script /main-script
RUN chmod +x /main-script

ENTRYPOINT [ "/main-script" ]
  • Bash脚本:
#!/bin/bash

mkdir -p /test

export TEST1=1
export TEST2=2
export TEST3=3

for I in {1..300} ; do
    echo '$TEST1 $TEST2 $TEST3' > /test/file-$I
done

for FILE in /test/file-* ; do
    envsubst < $FILE | tee $FILE
done

for FILE in /test/file-* ; do
    if [[ -z "$(cat $FILE)" ]]; then
        echo "$FILE is empty!"
        FAIL=1
    fi
done

if [[ -n "$FAIL" ]]; then
    exit 2
fi

输出看起来像这样:

...
/test/file-11 is empty!
/test/file-180 is empty!
/test/file-183 is empty!
/test/file-295 is empty!
linux bash docker tee envsubst
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.