2013-07-10 49 views
0

我想創建並使用源Bash腳本的函數中的別名。我遇到了類似於Inception的困難,我會很高興指出如何正確地做到這一點。如何創建並在源Bash腳本的函數中使用別名?

下面是一個示例腳本來源:

#!/bin/bash 

myFunction(){ 
    alias zappo="echo" 
    zappo 
} 


什麼建議嗎?

+0

唯一的原因,我可以看到在'bash'中使用一個函數的別名是別名在某些'readline' comm後會擴展(唯一默認綁定的是'shell-expand-line',C-M-e)。在非交互式shell中,您必須明確啓用別名擴展才能使其工作。只需使用一個功能。 – chepner

回答

1

請注意,別名將具有有限的腳本功能。從Advanced Bash Scripting Guide

在腳本中,別名的用處非常有限。如果別名可以假定C預處理器的某些功能(如宏擴展),那將會很好,但不幸的是,Bash不會在別名體內擴展參數。 [2]而且,腳本無法在「複合構造」中擴展自身,例如if/then語句,循環和函數。另一個限制是別名不會遞歸地擴展。幾乎總是,無論我們希望別名做什麼都可以通過函數更有效地完成。

我會用這個變量:

myFunction(){ 
    zappo="echo" 
    $zappo "foo bar" 
} 

甚至包裝函數:

zappo() { 
    if [ $1 = 'some value'] ; then 
     do something 
    fi 

    # apply out arguments to echo 
    echo [email protected] 
} 

現在這樣稱呼它:

zappo log_info "foo bar" 
+0

'$ zappo =「echo」'不是在shell腳本中聲明變量的正確語法。應該是'zappo =「echo」'。 – dogbane

+0

@dogbane ops。這是一個錯字。已糾正它,thx – hek2mgl

+0

優秀。感謝您對此的見解。 – d3pd