2010-03-24 70 views
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 {} \\; 

「關閉引號後多餘的字符」引發的錯誤,我想這需要一些更多逃避特殊字符或者我可能會正確地逃避現有的特殊字符。 任何幫助,將不勝感激。

+0

難道你沒有問過這裏:http://stackoverflow.com/questions/2462073/sed-does-not-work-in-expect – 2010-03-24 15:21:57

+0

它是我在上面的問題中實現的一部分。一個是不同的。 – Sharjeel 2010-03-24 16:09:56

回答

0

給我們語法錯誤查找或bash扔在另一邊。 並嘗試在分號末尾添加一個額外的\或2。

期望的問題是當它變得醜陋時你需要的逃脫層數。

在awk的聲明,去逃避所有的雙引號(「 - > \」)

,讓我得到一個錯誤消息:)

+0

當我在我的問題中運行該行時出現此錯誤 關閉引用後的額外字符 正在編譯 「send」echo; echo'Weblogic somefile.cf:'; find \ $(/ usr/ucb/ps auwwx | grep weblogic | tr'''\ n'| grep security.policy | grep domain | awk -F'=''{print ...「 – Sharjeel 2010-03-25 10:33:23

+0

看起來像雙引號 如果我有時間,我會將其滑入我的測試腳本中,直到此時... 嘗試: 發送「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 {} \\;; echo \ r「 – 2010-03-25 12:16:56

+0

does這部分真的需要這麼長時間? | sed -e's/weblogic.policy //'-e's/security \\ ///'-e's/dep \\ ///' | 或你可以做 | sed's/weblogic.policy //; s/security \\ ///; s/dep \\ ///'| – 2010-03-25 12:19:08

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中的單引號,它的意思是「字符串,不要以任何方式解釋內容」,因爲我想把這個字符串逐字地傳遞給派生的子進程,所以在這裏是合適的。

0

在您的send行末尾有一個"缺失。