一、Java執(zhí)行shell
命令
shell命令對應的就是macOS晕讲,cmd命令對應的是windows系統(tǒng)絮供;Java執(zhí)行shell/cmd
命令,google一下文章還是相當多的盯仪,這里簡單的記錄下:
核心執(zhí)行方法
1.1 執(zhí)行系統(tǒng)默認shell命令
比如ls 窟坐、clear蒸播、cd、pwd
等等
- 執(zhí)行單條命令
String cmd = "cd /Users/guxxxxd/Desktop";
String[] cmd = {"/bin/sh", "-c", cmd};
- 執(zhí)行多條命令使用
;
隔開
String cmd = "cd /Users/guxxxxd/Desktop; ls -a";
String[] cmd = {"/bin/sh", "-c", cmd};
1.2 執(zhí)行配置環(huán)境變量shell命令
需要自行配置環(huán)境變量的命令卵牍,比如gradle(我目前只用到了gradle)
先描述下我的應用場景,以及遇到的問題沦泌,其他場景不清楚不知道沒研究
場景:寫了一個gradle腳本用于把module編譯成aar發(fā)布到maven倉庫糊昙,再寫一個插件用于可視化的批量發(fā)布。
在terminal中執(zhí)行的命令是:gradle pubslish -P mn=module_name
問題:(很難描述谢谦,寫得很亂释牺,我過段時間再回頭看可能都看不懂)
- 如果直接使用
String cmd = "gradle pubslish -P mn=module_name";
會報command not foun:gradle
- 如果使用gradle全路徑:
String cmd = "/Uses/..../gradle-7.4/bin/gradle pubslish -P mn=module_name";
,雖然不會報command not foun:gradle
錯了,但是執(zhí)行gradle腳本
會失敗回挽,這個失敗的原因很奇怪没咙,是執(zhí)行gradle自有的命令失敗,就很納悶千劈,我這里執(zhí)行的是自己寫gradle腳本祭刚,如果是執(zhí)行String cmd = "/Uses/..../gradle-7.4/bin/gradle --version";
這樣的命令是沒有問題的;
!!!更讓人納悶的是墙牌,如果用插件執(zhí)行了String cmd = "/Uses/..../gradle-7.4/bin/gradle pubslish -P mn=module_name";
之后涡驮,再在terminal中執(zhí)行命令gradle pubslish -P mn=module_name
也會失敗(我不李姐喜滨,但是好像在我同事電腦上并不會捉捅,在我電腦上是必現(xiàn),真cd虽风,這個不重要棒口,只是讓我很費解)。
1.3 解決方法
使用前請切記!!!!!
,一定!
一定!
一定!
一定!
一定!
先執(zhí)行使環(huán)境變量生效的命令source ~/.bash_profile
辜膝。
關于source ~/.bash_profile
再之前文章【記錄】關于macOS每次都要調用source ~/.bash_profile使環(huán)境變量生效的問題有提到過无牵;也就是說,上面的代碼改成這樣就沒問題了厂抖,至少我是這樣解決了合敦。
String cmd = "source ~/.bash_profile; gradle pubslish -P mn=module_name";
String[] cmd = {"/bin/sh", "-c", cmd};
二、Java執(zhí)行cmd
命令
windows電腦上不存在刷新環(huán)境變量的操作验游,配置完成就算是完成了,可能不會出現(xiàn)這個問題(未驗證過
)
這里簡單記錄下Java執(zhí)行cmd命令的代碼
String cmd = "java -version";
String[] cmd = {"cmd.exe", "-c", cmd};
如果文章對你有幫助保檐,點個贊再走唄
如果文章中存在錯誤耕蝉,還望評論區(qū)指出
一起成長,共同進步