[英]cygwin ssh via windows cmd removes double quotes
我有兩台運行最新版cygwin的Windows機器。 我在兩者上都配置了OpenSSH,並且為遠程計算機設置了無密碼身份驗證。 我可以毫無問題地插入任何一台機器。 下面的所有命令都在cmd.exe中執行 。
系統規格(兩台機器相同):
我的問題的基本形式是這樣。 我必須在遠程計算機上啟動一個可執行文件。 我必須通過Windows命令行而不是cygwin通過ssh啟動此可執行文件。 該可執行文件有兩個參數。 這些參數之一需要封裝在雙引號中(因為我正在使用R中的第三方程序包,這會調用system(),而一個參數需要一個字符串)。 實際參數是-e“ parallel :::。slaveRSOCK()”
下面調用的script.exe是文件Rscript.exe。 這隨R的任何安裝(據我所知)一起提供。我沒有創建,編譯或任何東西。 我正嘗試調試的軟件包僅使用它,因為它允許您在R控制台gui之外執行R命令。 我要調試的程序包是“並行”程序,用於在遠程計算機上運行並行進程。 在創建或編譯此代碼時,我也沒有任何幫助。
也許不需要其他信息,但是我要調試的程序包部分是在遠程計算機上啟動進程的功能。 該函數將在給定一些參數的情況下開發一個命令,並在cmd.exe中執行此命令。 我正在嘗試復制命令並手動執行,因為在實際包中運行時,過程只是掛起了。
如果我開始在我的機器上的可執行文件,我將做到以下幾點,在windows 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之后,我還嘗試在整個命令周圍使用雙引號(單引號)進行各種組合,並使用^進行轉義,但是現在它幾乎變成了在黑暗中拍照,因此我認為這可能是求助於比我知識淵博的人的好主意。
可以提供的任何幫助或見解均深表感謝。 如有任何問題,請通知我。
編輯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()
呼叫:
ssh otherhost echo '\"hello()\" '
返回:
"hello()"
呼叫:
ssh otherhost echo "\"hello()\""
返回:
hello\(\)
替代地,將理解該行為的解釋。
我想你要:
ssh remoteHost "c:/Path/script.exe -e \"parallel:::.slaveRSOCK()\""
老實說,我無法完全解釋該報價背后的原因(如果是錯誤,又有什么原因呢?),但我認為這對您有用:
ssh remoteHost "c:/Path/script.exe -e \"parallel:::.slaveRSOCK\(\)\""
復雜的情況似乎是解析命令行的以下順序:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.