shell问题:别名不扩展

时间:2012-05-22 10:16:25

标签: windows bash msys mks

我有以下问题: 我有许多当前使用MKS Toolkit运行的测试脚本。我们设法使用mingw shell (msys)运行这些脚本,但还有其他脚本使用了一些内置MKS工具包而不是bash的alias

问题是没有人想要更改这些脚本,甚至不能通过使用脚本自动更改。这意味着我应该定义和使用这些别名。我尝试在msys shell的“/ etc / profile”文件中定义别名但没有任何成功。我也尝试使用shopt -s expand_aliases(在“/ etc / profile”中),但这也不起作用。

有人可以就如何做到这一点分享一个想法。请注意,现有脚本必须保持不变。

欢迎任何想法或想法。

由于

2 个答案:

答案 0 :(得分: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之前扩展别名并获取别名脚本)。

答案 1 :(得分:0)

This answer给了我解决方案。它涉及在执行

之前定义变量BASH_ENV
bash script_name.sh

BASH_ENV将指向一个设置shell环境的脚本。在我的例子中,要导出alias es以及所需的函数,脚本如下所示:

shopt -s expand_aliases

alias my_alias="echo my_alias"

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

export -f MyFunction