grepコマンドでジャンクオプションエラーを回避する方法

grepコマンドでジャンクオプションエラーを回避する方法

サーバーでプロセスが実行されていることを確認する必要があります。しかし、問題は私が使用するキーワードがuseridではなくo / pまたはpsコマンドの一部であることです。

走るときにps -ef | grep -v $$ | grep xenon得たものは

エラー:ジャンクオプション

使用法:ps [オプション]

追加のヘルプテキストを表示するには、「ps --help」または「ps --help」を試してください。

詳細については、ps(1)を参照してください。キセノンは実行されません。エラーを確認してください:ジャンクオプション

サーバーで何らかの理由でpgrep私の問題を解決できるO / Pを見ることはできません。サーバー運営者です。

$ps -ef | grep xenon
venom   3157  95310  0 23:08 pts/5    00:00:00 grep --color=auto xenon
root      45943      1  0 Apr12 ?        00:17:47 /opt/xenon/sganet/agent/lib64/sganetwatchdog -vm=/opt/xenon/sganet/agent/lib64/sganetos -logdir /opt/xenon/sganet/log -ini ../conf/ruxitwatchdog.ini
root      45981  45943  2 Apr12 ?        08:20:31 /opt/xenon/sganet/agent/lib64/sganetos -Dcom.compuware.apm.WatchDogTimeout=9000 -Dcom.compuware.apm.WatchDogPort=5000
$pgrep xenon
$pgrep -c xenon
0
$

デフォルトでは、検証サーバーで実行されている複数のプロセスを検証するために作成したスクリプトです。

#!/bin/bash
set +x
USER=`whoami`
#pg='ps -ef | grep -v $USER | '
pg='ps ax | grep -v grep | '
#--------function to check process ---------#
check_process() {

  $pg $1 >/dev/null && echo -e "$1 is running" || echo -e "$1 is not running, please check "
}

#--------Checking process on the server---------#

echo -e "\n\n checking the processes"
check_process xenon
check_process upnew

答え1

シェルパラメータ拡張が発生します。後ろにパイプラインの高度な分析行を構造化コマンドに分割して、関数の本文が作成したとおりに実行されるようにします。

ps ax '|' grep -v grep '|'

- つまり、パイプをリテラル引数として使用しますps。そのため、エラーが発生します。~からps(not from grep!)は引数を理解していないと文句を言います|

この問題はいくつかの方法で解決できます。

  1. 変数を使用する代わりに、関数にコマンドを書くだけですpg。これは私にとって最高のバージョンだと思いますが、実際のスクリプトはより複雑になる可能性があります。
  2. 同様のものが本当に必要な場合は、パイプを含む関数を使用してください。

    pg_cmd_1() {
        ps ax | grep -v grep | $1
    }
    pg=pg_cmd_1
    

    そしてそのまま進めてください。これにより、他の関数を定義し、pg変数を動的に変更して、必要に応じて使用できます。


また、現在書かれているようにスクリプトが実行しようとしていますが、ps ax | grep -v grep | xenonまだ望んでいないようです(1つが欠けていますかgrep?)。

関連情報