簡體   English   中英

如何在反斜杠中使用Runtime.exec()?

[英]How to use Runtime.exec() with backslash?

我嘗試從Java的分離屏幕啟動Shell腳本。

Runtime.getRuntime().exec("screen -S " + code + " -X stuff \"bash start.sh $(printf \\\\r)\"");

我認為"被替換為\\"\\\\\\

應該執行的普通代碼是

screen -S VMD54 -X stuff "bash start.sh $(printf \\r)"

從分離的屏幕(例如VMD54 (字符串代碼))開始start.sh

我的代碼有什么問題? 屏幕VMD54沒有任何反應

使用ProcessBuilder比使用exec更好。 無論哪種方式,請使用使用單獨參數的版本。 這是因為使用一個長字符串的版本不會像您想象的那樣打斷該字符串-它只會在空格上打斷它,而忽略引號,並將其作為命令的一部分傳遞。

在執行此操作時,應考慮在命令行上寫的內容並不是該過程最終實際收到的內容。 命令行解釋器-在您的情況下為bash-可完成多項操作。 它擴展了以$開頭的內容。 它刪除引號,但將其中的所有內容都視為一個參數。 因此,當您擁有命令時:

screen -S VMD54 -X stuff "bash start.sh $(printf \\r)"

bash的作用是將其分解為單詞,刪除引號(引號表示整個bash start.sh...是一個“單詞”)。

 screen
 -S
 VMD54
 -X
 stuff
 bash start.sh $(printf \\r)

然后在分隔的單詞中解釋$命令

 screen
 -S
 VMD54
 -X
 stuff
 bash start.sh ␍

它創建一個過程並傳遞這六個參數。 而且,您應該在Java中做完全相同的事情,因為Java沒有內置的bash解釋器。 要產生回車符,您應該在Java中使用\\r

String[] arguments = { "screen", "-S", code, "-X", "stuff", "bash start.sh \r" };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM