第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用帶空格的參數(shù)調(diào)用 java.lang.Runtime.exec(String) 時(shí)出現(xiàn)問題

使用帶空格的參數(shù)調(diào)用 java.lang.Runtime.exec(String) 時(shí)出現(xiàn)問題

有只小跳蛙 2023-03-23 15:23:44
我嘗試從 Java 進(jìn)程中的特定位置調(diào)用帶有文件的 vim 編輯器:Runtime.getRuntime().exec("gvim /etc/fstab '+normal GW'");不幸的是,這不起作用。它給出了一條來自 gvim 的奇怪錯(cuò)誤消息,這無助于發(fā)現(xiàn)問題 ("/etc/fstab" "/etc/fstab" [readonly] 12L, 664C)。直接輸入終端的相同命令效果很好。我試圖修改命令:Runtime.getRuntime().exec("gvim /etc/fstab +normal\ GW");直接在終端中輸入時(shí)也可以使用。但這給出了完全相同的行為。什么工作是將命令及其參數(shù)拆分為 String[]:Runtime.getRuntime().exec(new String[]{"gvim", "/etc/fstab" ,"+normal GW"});這種行為的原因是什么?如何從 Java 中將上述命令作為單個(gè)字符串調(diào)用?
查看完整描述

2 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

exec不是一個(gè)完整的外殼。

為方便起見,它確實(shí)允許您傳遞帶有可執(zhí)行文件名稱和參數(shù)的單個(gè)字符串(與使用版本相反String[]),但它用于拆分該字符串的邏輯非常簡(jiǎn)單,它只是調(diào)用new StringTokenizer(command),它只是拆分為空格,并且不了解完整命令 shell 會(huì)提供的特殊引用和轉(zhuǎn)義行為。

所以你的單引號(hào)沒有被尊重。

gvim /etc/fstab '+normal GW'   // last quoted section supposed to be a single arg

成為

String[]{ "gvim", "/etc/fstab", "'+normal", "GW'" } // four args instead of three

如何從 Java 中將上述命令作為單個(gè)字符串調(diào)用?

你真的需要這個(gè)嗎?除非應(yīng)用程序動(dòng)態(tài)地接受來自交互式用戶的命令行輸入,否則應(yīng)該可以在編寫程序時(shí)拆分參數(shù)。那樣安全多了。

如果你真的需要這個(gè),你可以將整個(gè)字符串傳遞給命令 shell。

嘗試 Runtime.getRuntime().exec(new String[]{"bash", "-c", theCommand });

但是涉及一些開銷。

除此之外,您可以嘗試找到一個(gè)可以“正確”拆分字符串的 Java 庫。


查看完整回答
反對(duì) 回復(fù) 2023-03-23
?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊

根據(jù)文檔exec(String command)將整個(gè)字符串視為命令,如果我們查看文檔

public Process exec(String command)
         throws IOException

在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令。

這是一個(gè)方便的方法。exec(command) 形式的調(diào)用與調(diào)用 exec(command, null, null) 的行為方式完全相同。

參數(shù):

command - 指定的系統(tǒng)命令。

來到exec(String[] cmdarray)它會(huì)將 cmdarray 視為包含要調(diào)用的命令及其參數(shù)的數(shù)組。這是這兩種方法之間的唯一區(qū)別,這可能是問題所在

public Process exec(String[] cmdarray)
         throws IOException

在單獨(dú)的進(jìn)程中執(zhí)行指定的命令和參數(shù)。

這是一個(gè)方便的方法。exec(cmdarray) 形式的調(diào)用與調(diào)用 exec(cmdarray, null, null) 的行為方式完全相同。

參數(shù):

cmdarray - 包含要調(diào)用的命令及其參數(shù)的數(shù)組。


查看完整回答
反對(duì) 回復(fù) 2023-03-23
  • 2 回答
  • 0 關(guān)注
  • 251 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)