【问题标题】:shell issue: alias doesn't expand外壳问题:别名不扩展
【发布时间】:2012-05-22 10:16:24
【问题描述】:

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

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

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

欢迎任何想法或想法。

谢谢

【问题讨论】:

  • 您确定用户从他或她的.profile 运行脚本来源/et/profile
  • @choroba 是的。我输入了echo,它可以工作。

标签: windows bash msys mks


【解决方案1】:

/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 之前扩展别名并获取我们的别名脚本)。

【讨论】:

  • 我认为您的回答与我的解决方案相似。我错误地浏览了 bash 文档,然后通过 stackoverflow 存档找到了它。
【解决方案2】:

This answer 给了我解决方案。它涉及在执行之前定义变量BASH_ENV

bash script_name.sh

BASH_ENV 将指向设置 shell 环境的脚本。就我而言,要导出 aliases 以及脚本所需的功能,如下所示:

shopt -s expand_aliases

alias my_alias="echo my_alias"

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

export -f MyFunction

【讨论】:

    猜你喜欢
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多