2013-05-26 31 views
2

大家好我正在學習如何使用.bashrc文件在Linux和我的標題狀態我想知道如何使功能識別參數作爲別名傳遞別名作爲函數參數的linux的bash

我定義爲所謂的家別名:alias home=$HOME

和功能去定義

function go(){ 
cd $1 
ls $1 
} 

但是當我做go home 我得到

bash: cd: home: No such file or directory ls: cannot access home: No such file or directory

當我想要它做的事去$ HOME

我怎麼會去實現呢?

+0

可你只是做'去$ HOME'? – alex

+0

或者簡單的'cd'根本沒有參數? –

+0

@GregHewgill這將是'cd && ls'獲得上述示例:) – alex

回答

5

別名是不是一個單詞替換,但小新創建的命令:

$ alias bla=ls 
$ bla 
file1 
file2 
file3 
… 

所以,它不能在方式使用你假設。

你可能想使用這個變量代換:

$ home=$HOME 
$ function go() { 
    cd "$(eval echo \$"$1")" 
} 
$ go home 

如果你想使用別名,儘管這是一種濫用,試試這個:

$ alias home=$HOME 
$ function go() { 
    cd "$(type "$1" | sed -e 's/.*is aliased to .//' -e 's/.$//')" 
} 
$ go home 
+0

+1對於建議的濫用行爲! :) –

+2

+1。你可以在bash中使用[variable indirection](http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion):'go(){cd「$ {!1}」 ; };回家吧# –

+0

好戲,@glenn :) – Alfe

3

我想知道如何使功能識別參數作爲別名

要字面上回答你的問題,你可以使用你的type -t函數中,以確定其參數是否是一個別名。但這可能不是你想要的。

AFAIK,你真正想要的是不可能的。從Bash manual(重點煤礦):

別名允許一個字符串被取代爲字當它被用作簡單的命令的第一個字

,你可以得到的最接近的是:

go `home` 
+0

謝謝你的回答。這是非常有用的(特別是鏈接),但@Alfe使其工作雖然稍作改變。但是+1的答案仍然= D – Alex