2014-09-13 166 views
3

是否有辦法以這種方式設置別名,以便我可以輸入命令,然後在單行中輸入參數?使用單一命令行編譯和編譯Java(Linux)

例如,而不是

javac Program.java && java Program 

我能去

newcommand Program.java //or "newcommand Program", whichever is easier 

它會做同樣的命令,上面的線。

回答

7

alias不進行接受參數,定義這樣的功能:

jcar() { javac $1.java && java $1 } 

然後使用它:

jcar Program 

jcar旨在作爲用於Java的編譯期的首字母縮寫並運行)

+0

你在哪裏定義函數?在.bashrc中?編輯:是的,那是在哪裏。我想到了。我很感激! – Nxt3 2014-09-13 18:04:09

1

我打算回答你給出一段Makefile,但它不夠通用。無論何時你想編譯一個更復雜的程序(比如說2個文件),你都需要編譯第二個程序。它可能在一個包中,在這種情況下,你所要求的不再工作。同樣的事情,如果你必須處理圖書館。

出於所有這些原因,我強烈建議你選擇你的選擇,makesconsant的建築工具,讓我們提到它maven。我發現稍後複雜的小項目的方式。但是ant是我最喜歡的java程序。最後,你可以只需要ant run這將運行你的程序,並在需要時重新編譯它。用螞蟻看看​​。

3

添加到enrico.bacis的回答,我個人不喜歡有Program.class文件塞滿了我的工作區,如果我只是測試程序,所以我會做

jcar() { javac $1.java && java $1 && rm $1.class}

另外,我發現它有助於陷阱ctrl-c這樣,即使我最終方案半途而廢,但仍刪除.class

jcar() { 
trap "rm $1.class" SIGINT SIGTERM 
javac $1.java 
java $1 
rm $1.class 
} 
0

添加到enrico.bacis'和notcompletelyrational的答案,如何下運行一個packa GE和清理包編譯的文件:

jcar() { javac -d . $1.java && java ${PWD##*/}.$1 && rm -rf ${PWD##*/}/ }

順便說一句,這個功能應該被分別添加到〜/ .bash_profile用於Mac OS和〜/ .bashrc中爲Linux。

運行它

jcar ProgramName 
1

我喜歡傳全Program.java文件名作爲輸入參數,便於自動完成。

這裏的notcompletelyrational的腳本,預計像jcar Program.java而非jcar Program命令編輯版本:

jcar() { 
    f=$1 
    f2=${f%.*} 
    trap "rm $f2.class" SIGINT SIGTERM 
    javac $1 
    java $f2 
    rm $f2.class 
}