Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 外壳问题:别名不';t扩展_Windows_Bash_Msys_Mks - Fatal编程技术网

Windows 外壳问题:别名不';t扩展

Windows 外壳问题:别名不';t扩展,windows,bash,msys,mks,Windows,Bash,Msys,Mks,我有以下问题: 我有许多测试脚本,目前正在使用运行。我们设法使用运行了这些脚本,但是还有其他脚本使用了一些内置MKS工具包而不是bash中的aliases 问题是没有人想更改这些脚本,甚至不想使用脚本自动更改。这意味着我应该定义和使用这些别名。我尝试在msys shell的“/etc/profile”文件中定义别名,但没有成功。我还尝试使用shopt-s expand\u别名(在“/etc/profile”中),但这也不起作用 有人能分享一下如何做到这一点的想法吗。请注意,现有脚本必须保持不变

我有以下问题: 我有许多测试脚本,目前正在使用运行。我们设法使用运行了这些脚本,但是还有其他脚本使用了一些内置MKS工具包而不是bash中的
alias
es

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

有人能分享一下如何做到这一点的想法吗。请注意,现有脚本必须保持不变

欢迎有任何想法或想法


谢谢

/etc/profile
仅用于登录shell。如果希望在脚本中使用别名,应将其放在单独的文件中,并将其源代码放在需要它们的脚本中。例如:

别名。sh:

alias walrus="echo coo coo cah joo"
#!/bin/bash

shopt -s expand_aliases
. aliases.sh

walrus
script.sh

alias walrus="echo coo coo cah joo"
#!/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_ENV

bash script_name.sh
BASH_ENV将指向设置shell环境的脚本。在我的例子中,要导出
别名
es以及所需的函数,脚本如下所示:

shopt -s expand_aliases

alias my_alias="echo my_alias"

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

export -f MyFunction

您确定运行脚本的用户来自其
.profile
?choroba Yes。我放了一个
echo
,它就工作了。我想你的答案和我的解决方案类似。我错误地浏览了bash文档,之后又浏览了stackoverflow归档。