2017-10-13 5 views
2

ここでこの1つのライナーをbash関数にする方法はありますか?bash関数内のパイプを使用する

mdfind -name autoflush.py | grep -Ev 'Library|VMWare|symf|larav' | sort 

私はこのようにそれを実行しようとしました:

function mdf() { mdfind -name "$1" | grep -Ev 'Library|VMWare|symf|larav' | sort } 

それで成功を持っていませんでした。

パイプ演算子をbashの関数内で使用できませんか?私は私のアプローチの多くの概念のエラーがある推測してい

function mdf() { 
    result=mdfind -name "$1" 
    grepped_result=grep -Ev 'Library|VMWare|symf|larav' $result 
    sort $grepped_result # return sort $grepped_result ? 
} 

私の次のアプローチはこれでした。だから私は助けと入力を感謝します。

+1

2つ目の試みには3つの問題があります。コマンドの出力を変数に割り当てるときは、出力をキャプチャするために '$()'を使う必要があります。たとえば、 'result = $(mdfind -name" $ 1 ")'となります。第2に、 'grep'と' sort'はデータではなく引数としてfile * names *を取ります。 'echo'を使い、その出力をコマンドに渡す必要があります。第3に、単語分割とワイルドカード展開を防ぐために、ほとんどの場合変数参照を二重引用符で囲む必要があります(例えば 'echo $ result'ではなく' echo "$ result")。 –

答えて

4

最初の試みでセミコロンがありません。

mdf() { mdfind -name "$1" | grep -Ev 'Library|VMWare|symf|larav' | sort; } 

あなたが必要とするシェルシンタックスのちょっとしたことです。コマンドを独自の行に置くと、その行は必要ありません。

mdf() { 
    mdfind -name "$1" | grep -Ev 'Library|VMWare|symf|larav' | sort 
} 

(私はfunctionキーワードを削除しました。互換性の都合上、あなたがそれらを組み合わせfunc()function funcのいずれかを記述したがべきではありません。)

shellcheck.netあなたが立ち往生している次の時間を試してみてください。シェルスクリプトの構文チェッカーです。本当の神です。

関連する問題