2012-10-25 38 views
0

我想加快編譯C文件時使用別名的時間。別名,變量和文件名

這裏是我的別名:

alias gccp="gcc -pendantic -Wall -ansi '$1'.c -o '$1'" 

我嘗試GCCP p1和希望它運行的命令gcc -pendantic -Wall -ansi p1.c -o p1

我在做什麼錯?

+2

別名無法處理像$ 1這樣的參數。轉換爲'函數gccp {gcc - ... $ 1 ...; }'。祝你好運。 – shellter

+0

其實他們可以。別名djang =「django-admin.py startproject $ 1」很好用。 –

+0

@Dave:運行'djang blah'時,shell將'django-admin.py startproject'替換爲'djang'並運行命令'django-admin.py startproject blah'。評估別名時,$ 1被擴展爲空字符串。 –

回答

1

別名不能有參數;在你的情況下,1美元是沒有的。你需要創建一個完成這個並導出它的函數。

編輯

我犯了一個錯誤。參數可能在bash別名中,但可能在創建別名時分配,而不是在調用別名時分配。所以爲了達到你想要的目的,在你的.bashrc文件中添加這個函數並重新啓動bash。

function gccp() 
{ 
     gcc -pendantic -Wall -ansi $1.c -o $1 
} 

甚至在再編輯

這一切都取決於你長期爭論。例如,如果我加入我的.bashrc下列文件並重新啓動的bash

alias blabla="echo $HOSTNAME"

我調用blabla我得到我的主機名。但$ HOSTNAME並不是一個真正的參數。這是一個變量。一個論點意味着你正在提供你正在調用的函數/命令的某種信息。所以通過這個定義,別名不需要帶參數。

+0

爲什麼這個別名工作呢?別名subl =「打開-a /Applications/Sublime.app $ 1」 –

+0

@Dave請參閱我的編輯 –

0

別名不能帶參數,請參閱Bash manual。當您使用參數調用別名時,參數只會附加到命令的末尾,因爲shell實際上只是將命令名替換爲別名值。

使用shell function代替:

gccp() 
{ 
    gcc -pendantic -Wall -ansi "$1".c -o "$1" 
} 
1

使用make代替。

$ export CFLAGS=-pendantic -Wall -ansi 
$ make p1 

make將使用其內置的模式匹配規則來做你想做的事。

如果使用環境變量與其他事物以不希望的方式進行交互,請將CFLAGS的值直接傳遞給make,或者寫入一行代碼爲CFLAGS的makefile。