Cygwin環境でスクリプトを実行する

Cygwin環境でスクリプトを実行する

私はこのコードを使用しています:

  numbzip=`ls *.plt.zip | wc -l` &>/dev/null

コマンドウィンドウで出力を削除してみてください。

.plt.zip で終わるファイルがないので、以下を返します。

ls: cannot access *.plt.zip: No such file or directory

何を試しても、コマンドウィンドウには常にこの行が記録されます。

私は試した:

numbzip=`ls *.plt.zip | wc -l` >/dev/null 2>/dev/null
numbzip=`ls *.plt.zip | wc -l` >/dev/null >>/dev/null 2>/dev/null

ありがとう、ウィルコ。

答え1

出力を解析しないでくださいls。代わりに検索を使用してください

numbzip=$(find -iname "*.zip" | wc -l)

echo $numzip

答え2

間違ったコンテンツをリダイレクトしているため、このメッセージは引き続き表示されます。

numbzip=`ls *.plt.zip | wc -l` &>/dev/null

これは、コマンドのstderrではなく変数割り当てのstderrをリダイレクトしますlsls内部で実行し、``外部にリダイレクトします。エラー出力をリダイレクトするには、次をls使用します。

numbzip=`ls *.plt.zip 2>/dev/null | wc -l` 

つまり、上記の方法は単純なファイル名には機能しますが、ファイル名に改行文字が含まれていると失敗します。通常、次のようにする必要があります。出力解析の防止ls。代わりにシェルワイルドカードを使用できます。

zipfiles=( *.plt.zip )
echo ${#zipfiles[@]}

最初のコマンドは、zipfilesglobと一致するすべてのファイル/ディレクトリの配列を生成します*.plt.zip。 2 行目は配列の要素数を出力します。

関連情報