簡體   English   中英

通過Runtime.exec()執行時命令失敗,但在Raspberry Pi(Linux)上手動執行時命令起作用

[英]Command fails when executed through Runtime.exec() but works when executed manually at Raspberry Pi (Linux)

當我嘗試通過Java中的Runtime.exec()執行一組命令時,其中一些命令不起作用。 但是,當我在終端中手動執行相同的命令時,它們都可以正常工作。 我確保復制完全相同的命令,並且它們僅在手動執行時起作用。 是什么原因引起的?

這是我的代碼:

rt = Runtime.getRuntime();
rt.exec("sudo wpa_cli -i " + ifName + " remove_network 0"); //Always removes network 0, in case it already exists
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " add_network 0");
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " set_network 0 ssid '\"" + SSID + "\"'");//This command only works when executed manually
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " set_network 0 psk '\"" + Pass + "\"'");//This command only works when executed manually
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " select_network 0");

我輸入SSID和密碼的命令會引起麻煩。 ifName是我正在使用的NIC的名稱。

請注意,我添加了幾個Thread.sleep()因為不確定在調用下一個命令之前命令是否有時間完成(因為這是配置網絡並連接到它,我真的不知道)。 也許它們完全沒用,但我添加它們是為了以防萬一。

編輯:我知道這與引號重復無關,因為我已經嘗試刪除引號,但是代碼仍然無法正常工作。 我不斷從控制台收到相同的FAIL消息。

感謝@ user140547的所有幫助!

通過執行rt.exec(new String[] {"sudo", "wpa_cli", "-i", ifName, "set_network", "0", "psk", "\\""+Pass+"\\""}); 看起來當手動執行命令時,您必須將密碼放在單引號和雙引號之間(例如: '"ActualPassword"' ),但是當使用rt.exec()絕對不應該使用簡單的引號,而實際上,寫下雙引號。

所以我想這個問題畢竟與引號重復無關,因為我最終不得不寫下引號。 我仍然不確定為什么會這樣。

暫無
暫無

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

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