追加読書

追加読書

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準拠のシェル構文に厳密に従う必要があります。

追加読書

答え2

cannot stat `*.{html,txt,php}'ステータスのエラーメッセージは次のとおりですcp

  • 一致するファイルがないか、
  • 使用中のシェルは中括弧拡張を実行しません。

コマンドが失敗したシステムでどのシェルを使用していますか? bashの代わりにshまたはdashの場合、これはあなたが見ているものを説明します。*.html *.txt *.php中かっこパターンの代わりにコマンドを表示できます。

関連情報