Bashからコピーするのに問題があります。これはうまくいきます:
# Enable extended globbing and include filenames beginning with a '.'
shopt -s extglob dotglob
# Copy git repo to expected place
cp -r !($YOCTO_DIR) $POKY_DIR/$GIT_REPO_NAME/
しかし、if
私がこれについて述べたとき:
if [ -z "$FROM_JENKINS" ]; then
# FROM_JENKINS is blank, this is a local build
# Enable extended globbing and include filenames beginning with a '.'
shopt -s extglob dotglob
# Copy git repo to expected place
cp -r !($YOCTO_DIR) $POKY_DIR/$GIT_REPO_NAME/
fi
私は得る:
./build.sh: line 80: syntax error near unexpected token `('
80行はcp
括弧を削除すると機能します。
cp -r . $POKY_DIR/$GIT_REPO_NAME/
if
文が括弧内の文と同じではないのはなぜですかcp
?
答え1
問題は、読んで実行する順序と「範囲」です。
ブロックif
全体は単なる命令です。したがって、シェルはコマンドを実行する前にコマンドを読み取る必要があります。
これはルールを意味するいいえ shopt -s extglob dotglob
(ここではすべての内容ではない行に言及しています。ilkkachuがコメントで指摘したように:dotglob
質問には関係ありません。)if
ブロックが終わるまで有効です。なぜなら、ブロックshopt
が終了した後にのみ実行されるからです。そうでなければ違法shopt -s extglob
です!(
。
shopt
したがって、前に移動する必要がありますif
(およびelse
四半期から元に戻すこともできます)。