2012-05-22 31 views
1

我有以下問題: 我有許多測試腳本,當前使用MKS Toolkit運行。我們設法使用mingw shell (msys)運行這些腳本,但還有其他腳本使用了一些alias es,這些腳本是內置MKS Toolkit而不是bash。shell問題:別名不擴展

問題是,沒有人希望更改這些腳本,甚至不會自動使用腳本。這意味着我應該定義和使用這些別名。我嘗試在msys shell的「/ etc/profile」文件中定義別名,但沒有取得任何成功。我也嘗試使用shopt -s expand_aliases(在「/ etc/profile」中),但這也不起作用。

有人可以分享一個關於如何做到這一點的想法。注意現有的腳本將不得不保持不變。

歡迎任何想法或想法。

謝謝

+0

確定運行腳本源'/等/ profile'從他或她'.profile'用戶? – choroba

+0

@choroba是的。我放了一個'echo',它起作用。 – INS

回答

0

This answer給了我解決方案。它涉及執行

bash script_name.sh 

BASH_ENV將指向一個腳本,設置shell環境之前定義的變量BASH_ENV。在我的情況下,導出alias ES,也是功能所需的腳本是這樣的:

shopt -s expand_aliases 

alias my_alias="echo my_alias" 

function MyFunction { 
    echo "MyFunction(DUMB):" $* 
} 

export -f MyFunction 
2

/etc/profile只能用於登錄shell。如果你想在你的腳本中使用別名,你應該把它們放在一個單獨的文件中,並將它們輸入到需要它們的腳本中。例如:

aliases.sh

alias walrus="echo coo coo cah joo" 

script.sh

#!/bin/bash 

shopt -s expand_aliases 
. aliases.sh 

walrus 

然後

$ ./script.sh 
coo coo cah joo 

這可能是做最合理的方式它。如果你堅持在所有不改變腳本,那麼你也許能執行他們間接喜歡閃避:

bash --rcfile aliases.sh -i script.sh 

這將告訴bash執行交互shell(從而擴大別名和源我們的別名腳本在執行script.sh之前)。

+0

我認爲你的答案與我的解決方案類似。我發現它錯誤瀏覽bash文檔,然後通過stackoverflow存檔。 – INS