0

このbashコマンドを実行して、Weblogicドメインディレクトリ内のsomefile.cfの内容を表示します。

find $(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed -e 's/weblogic.policy//' -e 's/security\///' -e 's/dep\///' | awk -F'/' '{print "/"$2"/"$3"/"$4"/somefile.cf"}' | sort | uniq) 2> /dev/null -exec ls {} \; -exec cat {} \;

これをexpectスクリプトに組み込んでみましたが、特殊文字と二重引用符もエスケープしましたが、「引用符を閉じた後の余分な文字」というエラーがスローされます。

send "echo ; echo 'Weblogic somefile.cf:' ; find \$(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed -e 's/weblogic.policy//' -e 's/security\\///' -e 's/dep\\///' | awk -F'/' '{print \"/\"\$2\"/\"\$3\"/\"\$4\"/somefile.cf\"}' | sort | uniq) 2> /dev/null -exec ls {} \\; -exec cat {} \\;

特殊文字をもう少しエスケープする必要があるか、既存の文字を正しくエスケープする必要があると思います。どんな助けでもいただければ幸いです。

4

3 に答える 3

0

複雑な引用符を使用してbashで機能することがわかっているコマンドラインがある場合は、先に進んでbashを使用する方が簡単なことがよくあります。このような:

set cmd {find $(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed -e 's/weblogic.policy//' -e 's/security\///' -e 's/dep\///' | awk -F'/' '{print "/"$2"/"$3"/"$4"/somefile.cf"}' | sort | uniq) 2> /dev/null -exec ls {} \; -exec cat {} \;}
spawn /bin/bash -c $cmd
expect ... whatever is appropriate ...

コマンド文字列の前後で「」の代わりにTcl{}演算子を使用したことに注意してください。この演算子はbashの一重引用符のようなもので、「リテラル文字列、内容をまったく解釈しない」という意味で、この文字列を生成されたbashサブプロセスに逐語的に渡したいのでここで適切です。

于 2010-04-08T11:30:52.590 に答える
0

反対側で find または bash がスローした構文エラーを教えてください。最後にセミコロンの前に \ または 2 を追加してみてください。

期待の問題は、それが醜くなったときに必要なエスケープのレイヤーの数です。

awk ステートメントで、すべての二重引用符をエスケープします ( " -> \" )

エラーメッセージが表示されます:)

于 2010-03-24T12:40:42.667 に答える
0

"行末に欠落がありますsend

于 2014-01-17T12:01:34.813 に答える