操作系統(tǒng)(無論Linux還是Windows)有一種“管道”的概念,可以把一個程序的標準輸入/輸出改到其他的地方。 你說的那些GUI外殼,就是為命令行程序創(chuàng)建了一個管道,標準輸入和標準輸出被改到了GUI外殼程序的內(nèi)部。所以就不會再彈出命令行窗口了。 GUI外殼會根據(jù)你在窗口上的操作,通過管道,向命令行程序發(fā)送指令,就像你手動在命令行窗口上敲命令一樣。 命令行程序的標準輸出也會通過管道傳送到GUI外殼的內(nèi)部,加以處理后在窗口上顯示個給你.
創(chuàng)新互聯(lián)公司是一家專業(yè)提供龍江企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站建設、網(wǎng)站建設、H5技術、小程序制作等業(yè)務。10年已為龍江眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。
在java程序中如何調(diào)用linux的命令?如何調(diào)用shell腳本呢?
這里不得不提到java的process類了。
process這個類是一個抽象類,封裝了一個進程(你在調(diào)用linux的命令或者shell腳本就是為了執(zhí)行一個在linux下執(zhí)行的程序,所以應該使用process類)。
process類提供了執(zhí)行從進程輸入,執(zhí)行輸出到進程,等待進程完成,檢查進程的推出狀態(tài),以及shut down掉進程。
至于詳細的process類的介紹放在以后介紹。
另外還要注意一個類:Runtime類,Runtime類是一個與JVM運行時環(huán)境有關的類,這個類是Singleton的。
這里用到的Runtime.getRuntime()方法是取得當前JVM的運行環(huán)境,也是java中唯一可以得到運行環(huán)境的方法。(另外,Runtime的大部分方法都是實例方法,也就是說每次運行調(diào)用的時候都需要調(diào)用到getRuntime方法)
下面說說Runtime的exec()方法,這里要注意的有一點,就是public Process exec(String [] cmdArray, String [] envp);這個方法中cmdArray是一個執(zhí)行的命令和參數(shù)的字符串數(shù)組,數(shù)組的第一個元素是要執(zhí)行的命令往后依次都是命令的參數(shù),envp感覺應該和C中的execve中的環(huán)境變量是一樣的,envp中使用的是name=value的方式。
下面說一下,如何使用process來調(diào)用shell腳本
例如,我需要在linux下實行l(wèi)inux命令:sh test.sh,下面就是執(zhí)行test.sh命令的方法:
這個var參數(shù)就是日期這個201102包的名字。
String shpath="/test/test.sh"; //程序路徑
Process process =null;
String command1 = “chmod 777 ” + shpath;
process = Runtime.getRuntime().exec(command1);
process.waitFor();
String var="201102"; //參數(shù)
String command2 = “/bin/sh ” + shpath + ” ” + var;
Runtime.getRuntime().exec(command2).waitFor();
你把要執(zhí)行文件的目錄在你說的profile里面聲明一下(路徑)。在path 加上pathmunge /home/test/out/bin/。生效指令source profile。改完后你可以用echo $PATH看看路徑是不是包含進去了。(我這是fedora,可能不一樣)