我目前正在测试GitHub操作,快速启动解释了如何将超级链接添加到回购中,这是一种在整个回购过程中应用皮毛的简单方法--我喜欢这个想法,所以我把它添加到了回购中,它应用的一个指针是外壳检查,它在我的一个shell脚本上抛出了一些错误。
该shell脚本使用以下代码发出docker run:
docker run --rm \
"${INTERACTIVE_MODE_FLAG}" \
${EXTRA_DOCKER_ARGS} \
"${IMAGE}":"${IMAGE_VERSION}" "$@"谢尔切克正在${EXTRA_DOCKER_ARGS}上发布${EXTRA_DOCKER_ARGS}。通过将代码更改为:
docker run --rm \
"${INTERACTIVE_MODE_FLAG}" \
"${EXTRA_DOCKER_ARGS}" \
"${IMAGE}":"${IMAGE_VERSION}" "$@"(注:用引号包装${EXTRA_DOCKER_ARGS} )
docker:无效的引用格式
如果我将set -x添加到脚本的顶部,它将显示问题所在:
注意如何将两个额外的撇号添加到命令中。
我的问题很简单。我怎么才能解决这个问题?我想消除Shellcheck错误,但仍然有一个有效的脚本。
发布于 2021-02-05 23:31:54
您的代码使用字符串作为列表,这种概念上的不匹配导致了警告。这是一个真正的问题,你应该解决它。
你应该要么:
首先,让EXTRA_DOCKER_ARGS成为一个清单。
或
将EXTRA_DOCKER_ARGS保持为字符串,并考虑如何将其拆分为参数(在空格上?一行行?壳牌引用的论点?)这需要与设置变量的人的期望相匹配。
对于A,可以简化将变量指定为数组并相应地展开它:
EXTRA_DOCKER_ARGS=()
docker run --rm \
"${INTERACTIVE_MODE_FLAG}" \
"${EXTRA_DOCKER_ARGS[@]}" \
"${IMAGE}":"${IMAGE_VERSION}" "$@"对于B,您可以将它作为一个shell引号字符串来处理,该字符串需要按eval展开:
extras=()
eval "extras+=( $EXTRA_DOCKER_ARGS )"
docker run --rm \
"${INTERACTIVE_MODE_FLAG}" \
"${extras[@]}" \
"${IMAGE}":"${IMAGE_VERSION}" "$@"如果您不修复此问题并继续依赖于隐式分词,那么您将无法传递包含空格的额外参数,例如-v "$HOME/My Documents:/mnt"。
发布于 2021-02-05 23:31:47
不禁用外壳检查警告:
#!/usr/bin/env bash
# Word split EXTRA_DOCKER_ARGS into extra_docker_args_array
read -r -a extra_docker_args_array <<<"$EXTRA_DOCKER_ARGS"
docker run --rm \
"$INTERACTIVE_MODE_FLAG" \
"${extra_docker_args_array[@]}" \
"$IMAGE:$IMAGE_VERSION" "$@"发布于 2021-02-05 23:15:55
看起来手册页https://www.mankier.com/1/shellcheck描述了覆盖错误的方法。
忽略某些错误:
shellcheck --exclude SC2086 file.sh如果您可以配置should检查参数来以那种方式运行它,那么它应该修复它。通常,我不喜欢重写指针,但在这种情况下,看看这个变量的作用,我看不出有什么方法可以绕过它。不能双倍引用一堆args到码头。它们真的需要作为单独的args来传递。
https://stackoverflow.com/questions/66071810
复制相似问题