Bashファイルからカスタム関数を作成する方法

Bashファイルからカスタム関数を作成する方法

新しいセッションを開くときに同じカスタム関数を評価(またはインポート)し、その機能を簡単に使用できるように、設定ファイルの1つからカスタム関数を生成する方法を探しています。

ログファイルに存在することを確認する関数を作成しようとしているため、ERRORログファイルを確認するときは、関数名とログファイル名のみを入力してください。今grepを使用しています。grep ERROR test.txt

しかし、このような小切手が多いので、もっと簡単にしたいと思います。だから、次の行を追加します.bashrc

ok(){grep ERROR $filename}

関数を使用すると入力が期待されます。ok test.txt そして、エラー行がある場合は表示する必要があります。

ただし、.bashrcファイルを評価した後、エラーメッセージが表示されます。

-bash: .bashrc: line 16: syntax error: unexpected end of file

私が入力すると、ok test.txt次のようになります。

-bash: ok: command not found

このカスタム機能を実装するのに役立つ人はいますか?または、コードを別の設定ファイルに貼り付ける必要がありますか.bashrc-profile

よろしくお願いします!

答え1

シェルは{ ... }構文の構文と空白に対して非常に面倒です。この機能を設定する方法は2つあります。

ok() { grep ERROR $filename; }
ok() {
    grep ERROR $filename
}

中括弧{ .. }と括弧に関しては( .. )Bash マニュアルには次の内容が記載されています。:

末尾のセミコロン(または改行文字)リスト必要です。

そして

中括弧は予約語なので、次のように使用する必要があります。リストスペースやその他のシェルメタ文字で構成されます。

リスト中かっこ内のコマンドを表し、すべて{ ... }使用された場所に適用されますが、関数が最も一般的です。

また、ファイル名を関数の引数として渡すには、$1そのファイル名を使用してください。つまり、ok() { grep ERROR "$1"; }で使用できますok test.txt

答え2

必ずしもそうする必要はありません。それからあなたは自由を感じ、大きな利益を得るでしょう。

ok() { set -f
if test -z "$2"
then
  grep -HPine "$1" -r --include=*.log --include=*.txt
else
  grep -HPine "$1" -r --include="$2"
fi
}

$ ok error test.txt
$ ok err test.txt
$ ok error
$ ok 'err|warn'
$ ok error logdata.*

3番目の使用法は、現在のディレクトリのすべてのディレクトリで、logおよびtxt拡張子を持つすべてのファイルで "error"文字列を含むすべての行を検索します。
4番目の使用法は、logおよびtxt拡張子を持つすべてのファイルで、「error」文字列を含むすべての行を検索します。または、 "warn"現在のディレクトリのすべてのディレクトリの5
番目は、現在の行ディレクトリのすべてのディレクトリで、文字列 "error"を含む拡張子を持つlogdataという名前のすべてのファイルを探します。

関連情報