予期しないマークアップ付近の構文エラー

予期しないマークアップ付近の構文エラー

Jenkinsはこのコマンドを実行しており、shを使用しています。しかし、私のbashスクリプトでこのエラーが何を意味するのかわかりません。

#! /bin/sh
for d in $(ls -d kube/xx/bb/!(abc*|!cdf*)/ | xargs -I {} basename {} ) ;do echo $d; done
test.sh: command substitution: line 3: syntax error near unexpected
token `(' test.sh: command substitution: line 3:
`ls -d kube/xx/bb/!(abc*|!cdf*)/ | xargs -I {} basename {} )'

ベストアンサー1

/bin/sh通常、これらのパターンを理解していないシェルで実行されているスクリプトで拡張されたグローブパターンを使用しようとしています。

または(各シェルで適切なオプションを設定する)など、bashこれらのモードを理解するシェルに切り替えるか、次のように理解することを使用します。kshzsh/bin/shfind

#!/bin/sh

find kube/xx/bb -prune ! -name 'abc*' ! -name 'cdf*' -type d -exec basename {} \;

またはGNUを使用している場合find

#!/bin/sh

find kube/xx/bb -prune ! -name 'abc*' ! -name 'cdf*' -type d -printf '%f\n'

!どちらの例でも、質問の前半が誤字であると仮定します。cdf*

ランダムに複雑なコマンドを実行するために、xargsパイプラインのようにfind完全findに利用可能な述語を実行する必要はほとんどありません。-exec

返品、なぜ`ls`を解析しないのですか*(そしてどうすればいいですか?)


より多くの手動アプローチ:

#!/bin/sh

for pathname in kube/xx/bb/*/; do
    [ -d "$pathname" ] || continue

    name=${pathname%/}
    name=${name#kube/xx/bb/}

    case $name in
        abc*|cdf*) continue ;;
    esac

    printf '%s\n' "$name"
done

おすすめ記事