bashスクリプトから現在のディレクトリの一部のファイルをコピーしようとしていますが、問題は、そのcp
コマンドが現在のディレクトリで機能していないことです。 Backtrack 5(Ubuntuベース)では問題なく次のコマンドを使用できますが、Kali Linux(Debianベース)では使用できません。
cp -f -v *.{html,txt,php} /var/www/
まず、ディレクトリをそのファイルがあるディレクトリに変更して、端末から直接このコマンドを実行できます。ただし、スクリプトを使用すると、次のエラーが発生します。
cp -f -v *.{html,txt,php} /var/www/
cp: cannot stat `*.{html,txt,php}': No such file or directory
Ubuntuを使用すると、スクリプトでこのコマンドを再利用することに問題はありません。
答え1
中かっこリスト/bin/sh
を拡張するシステムでは、Bourne Againシェルをとして使用します/bin/sh
。中かっこを通常の(メタではない)文字として扱い、ワイルドカードが一致しないと文句を言うシステムでは、Debian The Almquistシェルを使用します。/bin/sh
対話型ログインシェルは両方/bin/bash
のシステムでほぼ確実です。
スクリプトでPOSIXシェル言語の拡張機能を使用するには、スクリプトソルバーをサポートするシェルの実際の名前に設定する必要があります。逆に、/bin/sh
他のシステムでスクリプトソルバーとして使用する場合は、POSIX準拠のシェル構文に厳密に従う必要があります。
追加読書
- https://superuser.com/a/696310/38062
- ダッシュ
/bin/sh
。 Ubuntu Wiki。 - ダッシュ
/bin/sh
。 Debian Wiki。 - バシズム。グレッグのウィキ。
- 「馬の拡張」。 シェルコマンド言語。 IEEE規格1003.1。問題7.グループを開きます。
答え2
cannot stat `*.{html,txt,php}'
ステータスのエラーメッセージは次のとおりですcp
。
- 一致するファイルがないか、
- 使用中のシェルは中括弧拡張を実行しません。
コマンドが失敗したシステムでどのシェルを使用していますか? bashの代わりにshまたはdashの場合、これはあなたが見ているものを説明します。*.html *.txt *.php
中かっこパターンの代わりにコマンドを表示できます。