x、y、zを含まないファイルをコピーすると、シェルスクリプトでエラーが発生します。

x、y、zを含まないファイルをコピーすると、シェルスクリプトでエラーが発生します。

私はシェルスクリプトについてよく知りませんが、これは非常に簡単な修正になると思いましたが、混乱しています。

ディレクトリの内容(多くのファイルを除く)をコピーする必要があります。端末に入力すると動作するコマンドがありますが、シェルスクリプトで実行すると構文エラーが原因で失敗したり、まったく動作しません。

問題のコマンドは次のとおりです。

cp -r path/to/!(dir1|dir2|dir3) destination

どんな助けでも大変感謝します!

答え1

これがksh文法です。bashこの構文は、次の方法でオプションを有効にした場合にのみ認識されます。extglob

shopt -s extglob

したがって、その行をスクリプトの先頭に追加するか、スクリプトを置き換えるか呼び出すと解釈する必要がありkshます(後者はお勧めできません。スクリプトによって生成されたすべてのbashシェルに対してオプションが有効になっているため)。bashenv BASHOPTS=extglob your-scriptextglob

おそらく、システムでこのオプションを有効にしたのでしょう~/.bashrc。これがプロンプトで機能する理由です(~/.bashrc非ログインインタラクティブシェルでのみ読むことができます)。

関連情報