新しいセッションを開くときに同じカスタム関数を評価(またはインポート)し、その機能を簡単に使用できるように、設定ファイルの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という名前のすべてのファイルを探します。