GNU tail -fとコマンドの組み合わせに関する問題

GNU tail -fとコマンドの組み合わせに関する問題
$ tail -f /logs/filename.log | awk '!(/list)'

GNU Linuxバージョンでこのコマンドを実行できます。

しかし、スクリプトで書くとうまくいきません。

テスト.ksh:

variable="/logs/filename.log | awk '!(/list)'" 
tail -f $var

次のようにエラーが発生します。

tail: cannot open `|' for reading: No such file or directory
tail: cannot open `grep' for reading: No such file or directory
tail: cannot open `list' for reading: No such file or directory

どうすればこれを行う必要がありますか?誰でも私に指示を与えることができますか?

答え1

コードがさまざまな方法で破損しています...

  • 名前で変数を定義し、そのvariable名前で呼び出すことができますvar。それは動作しません。

  • 参照が奇妙だったので、最初はこの変数を使用して何を達成しようとしていたのかわかりませんでした。あなたは私よりもインタプリタに多くの問題を抱えているでしょう;-)効果的にコマンドセット(パイプを含む)のように見える文字列を送信することです。ただし、他のコマンドのパラメータとして引用された文字列の中にあるため、テキストの塊からパラメータとしてあまりにも多くの文字に遭遇します。通訳者が触れないこと。

test.kshファイルに次の内容を追加したい場合があります。

#!/bin/ksh
log_file="/logs/filename.long"
tail -f $log_file | awk '!(/list)'

または、次のコマンドで実行することもできます./test.ksh /logs/filename.log

#!/bin/ksh
tail -f $1 | awk '!(/list)'

答え2

2つの異なる記事を書いています。

シェルでtail -fの出力がawkにリダイレクトされることを宣言します。

スクリプトでは、tail -f は、「/logs/filename.log」、「|」、「awk」、および「!(/list)」というファイルからデータを読み取る必要があることを指定します。

スクリプトファイルに以下を作成しようとしています。

#!/bin/ksh
variable="/logs/filename.log"
tail -f $variable | awk '!(/list)'

関連情報