2010-08-25 152 views
0

我在寫一個簡單的shell腳本,它從一個命令獲取輸出並在另一個命令中使用它。使用shell腳本命令輸出

app=$(./twiddle.sh -u $1 -p $2 query jboss.web.deployment:* | grep $3) 
doop=$(./twiddle.sh -u $1 -p $2 invoke jboss.system:MainDeployer $4 $app) 

++ ./twiddle.sh -u管理-p密碼調用jboss.system:MainDeployer停止$ 'jboss.web.deployment:戰爭= worker.war,ID = 1518231766 \ R'

我在上面看到的命令,該應用程序是未來的價值:

$'jboss.web.deployment:war=worker.war,id=1518231766\r' 

但如果我這樣做回聲$應用程序,然後我沒有看到引號和\ r追加,如何確保應用程序不帶引號發送作爲另一個命令的輸入?我不知道問題出在哪裏 - 當我在shell外執行命令時,我看不到這是輸出。

感謝您的任何幫助。

回答

0

的sed將很好地工作,爲此:

sh -u $1 -p $2 query jboss.web.deployment:* | grep $3 | sed 's/\'//g' | sed 's/\r//g' 
+0

它通過這樣做: app ='echo $ app | sed's/\ r // g'' – Anna 2010-08-25 12:29:39

+0

很高興你有工作.... – ennuikiller 2010-08-25 13:00:44

+0

'grep模式| sed's/from/to/g''通常是不需要的,因爲sed有一個內置的grep:'sed -ne'/ pattern/s/from/to/gp''通常會保存一個分支。而且sed甚至可以做幾個替換節省另一個分支...... – Jens 2012-05-16 20:15:23

0
doop=$(./twiddle.sh -u $1 -p $2 invoke jboss.system:MainDeployer $4 "$app") 

如果您不希望內容被shell解釋,那麼應該使用帶引號的echo。如果您不希望像'人物太解釋,用printf:printf '%s' "$app"

+0

沒有加上引號沒有刪除的問題。 – Anna 2010-08-25 11:22:21

+0

您是否嘗試過使用printf做第二件事? 像這樣: doop = $(./ twiddle.sh -u $ 1 -p $ 2 invoke jboss.system:MainDeployer $ 4「''printf'%s'」$ app「''」) – Lekensteyn 2010-08-25 11:32:58