【问题标题】:Bash script working locally but returning syntax error in CIBash 脚本在本地工作,但在 CI 中返回语法错误
【发布时间】:2021-01-01 09:07:40
【问题描述】:

在我的 gitlab CI 上,我正在运行以下简单脚本 (.gitlab-ci.yml):

STR=$(cat $FILE)
if grep -q "substring" <<< "$STR"; then echo "ok"; fi

不幸的是,这给了我错误

/bin/sh: eval: line 100: syntax error: unexpected redirection

在本地运行与脚本相同的命令按预期工作:

#!/bin/sh

FILE="./file.txt"
STR=$(cat $FILE)

if grep -q "substring" <<< "$STR"; then
    echo "ok"
fi

文件有以下内容:

This has a substring somewhere

【问题讨论】:

    标签: bash shell sh gitlab-ci


    【解决方案1】:

    /bin/sh 不是 bash&lt;&lt;&lt; 是不是在每个 shell 上都可用的 bash 扩展。安装 bash,将 shebang 更改为 /bin/bash 并确保脚本在 bash 下运行或使用 posix 兼容语法 printf "%s\n" "$str" | grep...

    注意:按照惯例,大写变量是为导出的变量保留的,例如 IFS COLUMNS PWD UID EUID LINES 等。在脚本中使用小写变量。

    【讨论】:

    • 我在高山图像中运行它。我认为没有bash,只有sh。如何检查 sh 中的子字符串?
    • or use posix compatible syntax printf "%s\n" "$str" | grep... stackoverflow.com/questions/2829613/… 我的意思是if printf "%s\n" "$str" | grep -q somehthing; then
    猜你喜欢
    • 2011-06-30
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多