2016-02-29 71 views
0

我試圖運行裏面的Scala命令不起作用,這個命令是SSH調用需要的服務機內的CMD線的執行,它看起來像斯卡拉:正確的shell命令使用的ProcessBuilder

sshpass -p PSW ssh [email protected] "/absolute_path/program -input /absolute_path/filename" 

如果我打印從斯卡拉這個字符串,然後直接運行它正常的外殼內,但使用

cmd ! 

的服務器返回一個錯誤

bash: /absolute_path/program -input /absolute_path/filename: No such file or directory 
運行它

有人可以告訴我怎麼修復嗎?謝謝

修訂

var nestedcmd = "/absolute_path/program" + 
    " -input "+ server_dir +"/"+ filename 

var cmd = "sshpass -p "+ server_pass + 
    " ssh "+ server_user +"@"+ server_ip + 
    " \""+ nestedcmd + "\"" 

println(cmd) 
cmd ! 

的println產生我想直接在外殼內部運行,在cmd查詢!應該運行相同的命令

我在開發過程中使用這個解決方案,因爲在生產中代碼將直接運行到服務器,我不需要ssh調用,但對於開發,我需要運行「程序」從我的電腦服務器上

解決

這是足以刪除引號,SSH採用的連接參數服務器

+0

你有沒有嘗試用「」「(三引號)包裝整個事情,它會通過命令 – raam86

+0

我剛剛試過,是相同的,正確運行將字符串複製到shell但不直接從Scala –

+0

你能發佈更多代碼?看起來shell在輸入行之前正在讀取EOL,並將其作爲單獨的命令查看路徑 – raam86

回答

0

使用格式化字符串可以用這樣的問題幫助上運行命令後會發生什麼

var nestedcmd = """/absolute_path/program -input $server_dir/filename""" 

var cmd = """sshpass -p $server_pass ssh [email protected]$server_ip \$nestedcmd"""