誰かが私のスクリプトに表示されるこのエラーを説明できますか?

誰かが私のスクリプトに表示されるこのエラーを説明できますか?

私はすべてのドットファイルをGithubリポジトリとして設定したフォルダに追加し、毎晩プッシュするためにクローンジョブとして設定できるスクリプトを作成しようとしています。私のスクリプトは次のとおりです。

cp ~/.!(|.|ssh|bash_logout|bash_history) ~/dotfiles

git add .

git commit -m "Test commit"

git push origin master

次のエラーが発生します。

./update_dotfiles.sh: line 3: syntax error near unexpected token `('
./update_dotfiles.sh: line 3: `cp ~/.!(|.|ssh|bash_logout|bash_history) ~/dotfiles'

コマンドを実行すると正常に実行されますが、シェルスクリプトの一部として実行するとエラーが発生します。スクリプトがbashを実行しています。

答え1

bashシェルを指定する必要があります。シェルボーンこれを行うには、次の手順を実行します。

#!/bin/bash

bashがshebangなしでまたはshebangを使用してスクリプトを実行する#!/bin/shときPOSIXモードこれにはいくつかの制限があります。

また、ワイルドカードパターンを理解するためにextglobシェルオプションを有効にする必要があります。bash!(...)

shopt -s extglob

関連情報