2015-07-02 169 views
0

在我的bashrc文件中,我有n個別名。但是,如果我通過shell腳本執行, 它不會給出預期的輸出。爲什麼它會是這樣的。有沒有辦法來解決這個問題 。在shell腳本中不執行別名

在此先感謝。

+2

別名不導出子殼 – anubhava

+0

有什麼方法導出的別名 – Mohan

+0

您需要在相同的別名文件源腳本,比如'源的〜/ .alias' – anubhava

回答

1

別名(如使用alias name=value設置)是只有用於交互式環境中,即當用戶在命令行輸入某些內容時。他們是從未(除非非交互的shell明確調整,以做到這一點使用shopt -s expand_aliases)由腳本執行:

#!/bin/bash 
alias ttt=date 
ttt # will fail! 

採購配置腳本定義別名不會改變這事。腳本根本不會執行別名。

達到你想要什麼,重寫你的別名作爲外殼的功能:

#!/bin/bash 
ttt() { 
    date 
} 
ttt # will succeed! 

殼牌功能可完全替代別名,但也有一些更多的東西來了解和考慮:

  1. 你甚至可以導出shell函數,以便子shell也擁有它們。爲此,請使用export -f ttt
  2. Shell函數可以覆蓋其他命令,因此它們可能會干擾腳本的行爲(與腳本中執行的別名從不不同)。請記住這一點,以防計劃重寫諸如cdls之類的內容。
  3. 可以通過調用它作爲builtin cd /my/direc/tory來覆蓋內置的外殼(例如cd)。
  4. 參數處理與別名完全不同(功能更強大)。
+0

有點強烈地說,別名在腳本中永遠不會被擴展;你可以使用'shopt -s expand_aliases'來啓用它們。 – chepner

+0

是的,但是誰呢?但你當然是對的。我會將其添加到答案中。 – Alfe

+2

沒有人,因爲函數是更好的主意:) – chepner