2012-05-24 121 views
2

我在從shell腳本內執行的命令中使用單引號時遇到問題。 在我的腳本中,我執行一個應該有-u''(< - 2個單引號)作爲參數的rdesktop命令。 但是,無論我如何嘗試轉義引號,它都不能正確傳遞。shell腳本:執行中的單引號

如果我只是回聲$命令的輸出是好的,如果我執行它怪異的輸出創建

這是腳本的一部分不起作用:

command="rdesktop -u "\'\'" $server" 
`$command` 

我也嘗試過直接執行它:

`rdesktop -u "\'\'" $server` 

我希望得到任何幫助,因爲我讀了逃避在shell腳本人物相當多的教程,並沒有找到解決辦法..

編輯:

有趣的是,如果我只是用

command=rdesktop -u '' $server 

,並呼應它,輸出然而細 ,如果我

$command 

失敗執行。 ...

+0

'rdesktop -u「''」$ server'怎麼樣? –

+0

這不應該超級用戶嗎? –

回答

2

如果您的shell是bash或ksh或zsh,則使用數組而非字符串構建命令會更安全和更輕鬆:

command=(rdesktop -u '' $server) 

並執行這樣的

"${command[@]}" 

我無法想象的遠程服務器需要看字面''(即2單引號)命名的用戶名 - 它可能想只是一個空字符串。

+0

解決了它,謝謝! –

+0

你應該像這樣執行它:$(「$ {command [@]}」);) – derFunk

+0

@derFunk,no,只有當你想捕獲輸出。當你做這個'echo foo'時,你會看到foo;當你執行這個'$(echo foo)'時,你將命令替換的結果發送到shell中** execute **作爲一個命令 - 你將得到'foo:command not found' –

0

首先,如果你輸入

`rdesktop something` 

然後這意味着調用rdesktop,取出輸出,並將該輸出作爲命令運行。要「直接執行」,只需鍵入

rdesktop something 

現在報價。如果您執行

rdesktop -u '' $server 

然後rdesktop將看不到引號。它們作爲解析命令的shell的一部分被刪除。爲了得到rdesktop看到一個說法'',使用

rdesktop -u "''" $server 

沒有必要真的添加任何進一步的逃逸,因爲單引號不是雙引號字符串中的特殊。

編輯:當你想在一個變量的命令做的是執行它,注意,這個剝離的報價只發生一次:

cmd="rdesktop -u '' $server" 
$cmd 
+0

嗯,不幸的是這不適用於我,如果我使用 'cmd =「rdesktop -u \」''\「$ server」' 它通過「''」作爲參數,而不是'' –

+0

編輯。儘管我仍然認爲你的遠程用戶名實際上由兩個單引號組成。 –

0

當你調用rdesktop -u '' $server,要調用帶有3個參數的rdesktop,其中第二個是空字符串。這不是很清楚,我爲什麼要嘗試調用它在反引號,但你可以得到你想要使用命令的第一個定義是什麼和:

eval $command 

請注意,如果你沒有完全控制的$server內容,那麼這是一個很大的安全風險。(例如,如果服務器是字符串; cmd,那麼調用eval將執行cmd