質問

私はシェルからそれを実行したときに、私は彼らのフルpaths.Thisと一緒に実行されているWebLogicインスタンスを一覧表示するために使用し、このbashのワンライナーがうまく機能作られています。

/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort

私は期待していたスクリプトでこれを組み込むことを試みた。

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort ; echo ; echo\r"

私は、このエラーのsedました:-e式#1を、CHAR 13:不明なオプション `s'をへ

助けてください。

役に立ちましたか?

解決

慎重なカウントまたはテストがなければ、私は、「セキュリティ\」の後に別の\を追加する、または可能性、既存のものを削除してみたい。

また、あなたは1に2つのSEDSを組み合わせることができます:sed -e 's/weblogic.policy//' -e 's/security\///'

他のヒント

おそらく\文字

sed 's/security\///'

は、例えば、コンテキストを期待するに余分なエスケープを必要とします。

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\\///' | sort ; echo ; echo\r"

の代わりに送信したい文字列を二重引用符の使用Tclの{}演算子。 Tclの中に{}構文は、「文字列リテラルは、その内容を解釈していない」という意味は、bashでの単一引用符に相当します。

{}あなたはTclが/サブプロセス、文字の文字、余分に必要な引用は。

に送信することを期待したいものを正確に置くインサイド

私は、これはリモートホストにオーバー送信するためには複雑すぎると思います。代わりに、小さなシェルスクリプトでコマンドを入れて、それを実行します。この方法は、あなたがなど、エスケープ、ので引用拡張ルールのトラブルに実行されません。

また、あなたはスクリプトを実行する代わりにsshexpectを使用する必要があります。 expectは、適切なスクリプト機能を持っていないftpのようなインタラクティブなコマンドを実行しているためである。

あなたは、単一引用符を削除してみて、もう一度コマンドを実行することができます。

send "....... sed s/weblogic.policy// | sed s/security\/// ..."

その最もおそらく引用の問題。そのOKでない場合は、hlovdalの提案をしてみてください。

一方で、あなたの長めのコマンドの一部を組み合わせることができます。

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top