2017-04-10 76 views
0

我試圖創建一個「permalias」bash命令,以便能夠輕鬆創建永久別名而無需直接在〜/ .bashrc文件上工作。創建永久別名bash命令

截至目前,我已經能夠使這項工作的唯一途徑是與此代碼:

alias permalias="echo alias $1 >> ~/.bashrc" 

允許對該格式的輸入:

permalias commandname=\"commandbody\" 

但我我不滿意這個,因爲我想保持一個更簡單的輸入格式,一個更接近原始的別名命令。

我試過這段代碼的幾個變種:​​

alias permalias="echo alias $1=\"$2\" >> ~/.bashrc" 

使用此版本,該代碼permalias c "echo test"應此行alias permalias c="echo test"添加到〜/ .bashrc文件。

但相反,這是結果:alias c "echo test",當然,這是行不通的。

我還對如何避免把「圍繞新命令的身體需要任何建議表示感謝。

謝謝

回答

0

試試這個:在.bashrc先說別名

#!/bin/bash 
permalias() 
{ 
    local alias_regex='[A-Za-z_0-9]*' 
    if 
    [[ $# = 1 && $1 =~ ($alias_regex)=(.*) ]] 
    then 
    printf "%s\n" "${BASH_REMATCH[1]}=\"${BASH_REMATCH[2]}\"" >> ~/.bashrc 
    else 
    echo "USAGE: permalias VARNAME=ALIAS_COMMAND" 
    return 1 
    fi 
} 

一個更好的版本將檢查存在,然後將取代它,或者如果它已經存在失敗。

0

alias不能使用的參數。什麼你需要的是一個功能,是這樣的:。

permalias() { 
    echo "alias ${1}=\"${2}\"" >> ~/.bashrc 
} 
+0

試過了,結果是一樣的。該=未寫入文件中。參數'數字周圍{}的含義又是什麼? – RenzR

0

使它成爲一個功能奧利說,那麼你可以使用"$*"所有的參數串聯到功能

permalias() { 
    n=$1; 
    shift; 
    echo "alias $n=\"$*\"" >> ~/.bashrc; 
} 

這應與東西一樣工作permalias c echo foo bar,但如果你真的想引號別名,它會得到毛。 permalias c echo "foo bar"將無法​​正常工作,您需要使用類似permalias c echo "'foo bar'"的東西來抵消額外的命令行處理級別並獲取文件中的內部引號。

對於任何複雜的東西,無論如何最好都要生成一個shell函數。您可以使用declare -fp funcname來打印函數的定義,並將其保存爲文件。