2012-03-20 45 views
16

如何在我的bashrc中檢查是否已設置別名。如何在我的bashrc中檢查是否已設置別名

當我一個源文件的bashrc,其中有一個函數名,說樂趣,和我目前的環境有一個別名爲樂趣也。

我試過unalias樂趣,但是這會給我一個錯誤,當我的環境不會有這個別名時就沒有找到樂趣。

所以在我的bashrc中,在我的fun函數中,我想檢查是否設置了別名,然後unalias。

回答

22

如果你只是想確保別名不存在,只是unalias它和它的錯誤重定向到/ dev/null的是這樣的:

unalias foo 2>/dev/null 

如果一個別名設置與您可以檢查是這樣的:

alias foo 2>/dev/null >/dev/null && echo "foo is set as an alias" 

正如手冊頁指出:

For each name in the argument list for which no value is sup- 
plied, the name and value of the alias is printed. Alias 
returns true unless a name is given for which no alias has been 
defined. 
8

只需使用命令alias

alias | grep my_previous_alias 

請注意,您可以實際使用unalias,所以你可以不喜歡

[ `alias | grep my_previous_alias | wc -l` != 0 ] && unalias my_previous_alias 

,如果它被設置,將刪除該別名。

+0

我用這個來測試'我的Mac和Linux機器之間la'。在Mac上的.bash_profile中,我有'alias la ='ls -GA'(因爲G是彩色的),然後在我的'.bashrc'中有函數checkLa(){if [「$(alias | grep la) 「==」ls -GA「];然後回顯「mac用戶!」;返回0; fi echo「linux user!」; alias la ='ls -A --color = auto'}; checkLa()'。我知道別名也會返回所有的別名,但我只是沒有想到它! :d – dylnmc 2014-09-23 21:02:20

2

您可以使用type查看命令是否存在,或者是否是別名。

如果找不到命令,它將返回錯誤狀態。

例如,我定義以下別名:

$ alias foo="printf" 

然後檢查以下方案:

$ type foo >/dev/null && echo Command found. || echo Command not found. 
Command found. 

或專門爲別名:

$ alias foo && echo Alias exists || echo Alias does not exist. 

,或者檢查無論是別名還是常規命令:

$ grep alias <(type foo) && echo It is alias. || echo It is not. 

要檢查別名是否在您的rc文件中定義,需要手動檢查它,例如,由:

[ "$(grep '^alias foo=' ~/.bash* ~/.profile /etc/bash* /etc/profile)" ] && echo Exists. || echo Not there. 
1

好特定的bash-溶液來檢查別名使用BASH_ALIASES陣列,例如是:

$ echo ${BASH_ALIASES[ls]} 
0

您可以使用下面的方法使你的.bashrc文件簡單:

  1. 確保別名存在。
  2. Unalias it。
  3. 定義功能

alias fun='' 
unalias fun 
fun() 
{ 
    # Define the body of fun() 
} 
相關問題