我有兩臺運行最新版本的cygwin的Windows機器。我在他們兩個上配置了OpenSSH,並且爲遠程機器設置了無密碼驗證。我可以在沒有任何問題的情況下進入任一機器以下所有命令都在cmd.exe中執行。通過Windows CMD cygwin ssh刪除雙引號
系統規範(用於兩個機器相同):
- Cygwin的版本32年7月1日
- 視窗7
- 版本從CMD返回 「的Microsoft Windows [版本6.1.7601]」
- ř 2.14.1
我的問題的基本形式是這樣的。我必須在遠程機器上啓動一個可執行文件。我必須通過Windows命令行通過ssh啓動此可執行文件,而不是cygwin。該可執行文件有幾個參數。其中一個參數需要封裝在雙引號內(因爲我正在使用R中的第三方軟件包,它調用system(),並且一個參數需要一個字符串)。實際參數是-e「parallel :::.orderRSOCK()」
下面調用的script.exe是文件Rscript.exe。這與任何(據我所知)R安裝。我沒有創建它,編譯它,或任何東西。它只是被我試圖調試的軟件包所利用,因爲它允許你在R控制檯gui之外執行R命令。我試圖調試的軟件包是「並行」的,我正在使用它來在遠程機器上運行並行進程。我也沒有任何創建或編譯此代碼的手。
也許不需要額外的信息,但我試圖調試的包的部分是在遠程機器上啓動進程的功能。此函數根據給定的參數開發一個命令,並在cmd.exe中執行該命令。我試圖複製命令並手動執行,就像在運行實際的程序包時進程簡單地掛起一樣。
如果我我機器上啓動可執行文件,我將做到以下幾點,在cmd中的窗口。
C:\Path\script.exe -e "parallel:::.slaveRSOCK()"
而且這工作正常。建立到遠程機器的ssh連接並隨後運行此命令(將C更改爲c)也適用。
但是,當我進行下面的調用從我的機器
ssh remoteHost c:/Path/script.exe -e "parallel:::.slaveRSOCK()"
我收到以下錯誤
bash: -c: line 0: syntax error near unexpected token '('
bash: -c: line 0: 'c:/Path/script.exe -e parallel:::.slaveRSOCK()'
於是開始遠程機器上這個劇本我已經丟失了雙引號,顯然我沒有正確地逃脫它們。我嘗試過以下的電話。這是接近
ssh remoteHost c:/Path/script.exe -e \"parallel:::.slaveRSOCK()\"
但錯誤的第二行給我
bash: -c: line 0: 'c:/Path/script.exe -e \parallel:::.slaveRSOCK()"'
不作一大堆的道理給我,因爲我設法逃脫第二個引號,但第一消失,而我在平行之前留下了一個「\」。
編輯
這其中,作爲答案
ssh remoteHost "c:/Path/script.exe -e \"parallel:::.slaveRSOCK()\""
給了我下面的錯誤
bash: -c: line 0: 'c:/Path/script.exe -e \parallel:::.slaveRSOCK()\'
也是一個很奇怪的結果的一個建議,我們失去了兩個雙引號但保留逃生
我也在ssh remoteHost之後嘗試了各種雙引號(單引號)的組合,並使用^來逃避,但現在它已經變成了在黑暗中拍攝鏡頭,所以我認爲它可能是一個好主意讓人們比我更懂事。
任何可以提供的幫助或見解都非常感謝。如果有任何問題請告訴我。
EDIT 2
以下是奇逃避這回事一些簡單的例子。
電話:
ssh otherhost echo \"hello()\"
返回:
bash: -c: line 0: unexpected EOF while looking for matching '"'
bash: -c: line 0: syntax error: unexpected end of file
電話:
ssh otherhost echo \"hello()"
返回:
hello()
鈣LL:
ssh otherhost echo '\"hello()\" '
返回:
"hello()"
電話:
ssh otherhost echo "\"hello()\""
返回:
hello\(\)
另外,此行爲的解釋,將不勝感激。
你能說清楚以下哪些版本在本地機器和遠程機器上運行:OS,shell(bash或cmd.exe),cygwin。另外,什麼是'script.exe'?它是一個你編譯的實際編譯的可執行文件(以及什麼工具鏈)? 「bash」在什麼地方出現?基本上,什麼版本運行在哪裏?此外,嘗試遠程編譯和運行這個簡單的C程序來回顯正在傳遞的參數:http://snipplr.com/view/22593/ – 2014-09-22 19:01:03
@MichaelBurr當然,我會盡快回復。 – DMT 2014-09-22 19:05:29
@MichaelBurr我想我已經添加了所有你需要的信息。我現在要去做C程序。讓我知道我是否錯過了任何東西。至於bash來自哪裏,我認爲這是因爲,雖然我從Windows cmd ssh,我連接到遠程,通過cygwin運行一個bash shell運行的OpenSSH。可能是問題的一部分,使cmd.exe調用,然後由bash處理 – DMT 2014-09-22 19:20:39