ls | grep something
コマンドからの空でない出力がある場合、いくつかのステートメントを実行したいif/thenステートメントを実行しようとしています。私は使用すべき構文を知らない。まあ、それは近いのですが、あなたはfi
とif
を完了する必要がありBashシェル `if`コマンドが何かを返します` then`何かを実行します
if [[ `ls | grep log ` ]]; then echo "there are files of type log";
ls | grep something
コマンドからの空でない出力がある場合、いくつかのステートメントを実行したいif/thenステートメントを実行しようとしています。私は使用すべき構文を知らない。まあ、それは近いのですが、あなたはfi
とif
を完了する必要がありBashシェル `if`コマンドが何かを返します` then`何かを実行します
if [[ `ls | grep log ` ]]; then echo "there are files of type log";
:私はこれのいくつかのバリエーションを試してみました。
また、if
はコマンドを実行するだけで、コマンドが成功すると(状態コード0で終了します)、grep
は少なくとも1つの一致が見つかった場合にのみ実行されます。だから、出力をチェックする必要はありません。
if ls | grep -q log; then echo "there are files of type log"; fi
あなたは-q
(「静かな」)オプションをサポートしていませんgrep
の古いまたは非GNUバージョンのシステムを使っているのであれば、あなたをls
もDのように、それは指定されたファイルが見つからない場合は、あなたがすべてでgrep
せずに同じことを行うことができます0以外の値を返しますので、
if ls | grep log >/dev/null; then echo "there are files of type log"; fi
しかし:/dev/null
に出力をリダイレクトすることによって、同じ結果を達成することができます。シャーリーの答え:
if ls *log* >&/dev/null; then echo "there are files of type log"; fi
それは少しwordierだけれどもまた、さえls
せず、唯一のシェルを使用してそれを行うことができます。
for f in *log*; do
# even if there are no matching files, the body of this loop will run once
# with $f set to the literal string "*log*", so make sure there's really
# a file there:
if [ -e "$f" ]; then
echo "there are files of type log"
break
fi
done
限り、あなたは特別のbashを使用しているとして、あなたはそれを簡略化するnullglob
オプションを設定することができます幾分:
shopt -s nullglob
for f in *log*; do
echo "There are files of type log"
break
done
ありがとうございます。 –
if
ビルトインシェルコマンドを実行し、コマンドの戻り値に基づいてブロックを選択します。 ls
は、要求されたファイルが見つからない場合に別のステータスコードを返しますので、grep
の部分は必要ありません。 [[
ユーティリティは、実際には算術演算を実行するbash、IIRCの組み込みコマンドです。 Bourneシェルの構文から遠く離れていることはめったにないので、私はその部分で間違っている可能性があります。とにかく
、あなたが一緒にこのすべてを置く場合は、次のコマンドで終わる:
if ls *log* > /dev/null 2>&1
then
echo "there are files of type log"
fi
説明をありがとう、しかし私はむしろgrepを使用して設定されました。いくつかの正規表現規則をフィルタリングし、ls以外の他のコマンドの出力をフィルタリングするつもりです。私は例としてlsを使用していたので、私のフォーマットを解決すればもっと多くの同様のコマンドを書くことができます。 Cheers、〜) –
@BillyMoon - 'ls'の出力をgreopするのではなく、' find'を使うことをお勧めします。'ls'を使用している場合は、' ls'の別名に驚かないようにフルパスを使います。 –
@ D.Shawleyあなたはコマンドの特定のパスに依存することなくエイリアスと機能の両方をバイパスする 'command ls'を使うこともできます。 –
またはif; then; fi
なし:
ls | grep -q log && echo 'there are files of type log'
あるいは:
ls *log* &>/dev/null && echo 'there are files of type log'
'>&'ではなく '&>'を意味します。 –
http://mywiki.wooledge.org/BashFAQ/004( "ディレクトリが空であるかどうかを確認するにはどうすればよいですか?* .mpgファイルを確認するにはどうすればいいですか。どのくらいの数がありますか? ")は、手元にある直近の問題にいくらか関連しています。 –