変数ログをパラメータとしてスクリプトに渡すには?

変数ログをパラメータとしてスクリプトに渡すには?

以下を実行するスクリプトにログをパラメータとして渡そうとします。

#!/bin/bash
filter(){

grep -E "ERROR|FATAL|WARN|Caused|^[[:space:]]" /app/me/logs/$1

}

#read varName

filter > /app/me/logs/${1}.filtered

cat /app/me/logs/${1}.filtered

しかし、何も出力せず、生成されたログファイルには何もありません。私が渡すコマンドは次のとおりです。

>>> log_filter test.log

log_filterはスクリプトの名前、test.logはフィルタリングしたいパラメータログです。ご覧のとおり、「read varName」と書いていますが、各スクリプトに$ 1の代わりにvarNameを渡すと機能しますが、機能しません。欲しいです。

ベストアンサー1

変更:

filter > /app/me/logs/${1}.filtered

到着する:

filter "$@" > "/app/me/logs/${1}.filtered"

なぜ?各関数には独自の位置パラメータのリストがあります。呼び出す関数に位置引数のリストを指定する必要があります。

つまり、関数の内部は
基本スクリプトと同じではありません。$1filter$1

パラメータが1つだけ必要な場合:

filter "$1" > "/app/me/logs/${1}.filtered"

それだけで十分です。

おすすめ記事