質問
私はシェルからそれを実行したときに、私は彼らのフル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が/サブプロセス、文字の文字、余分に必要な引用は。
に送信することを期待したいものを正確に置くインサイド私は、これはリモートホストにオーバー送信するためには複雑すぎると思います。代わりに、小さなシェルスクリプトでコマンドを入れて、それを実行します。この方法は、あなたがなど、エスケープ、ので引用拡張ルールのトラブルに実行されません。
また、あなたはスクリプトを実行する代わりにssh
のexpect
を使用する必要があります。 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