Bash脚本无法读取Bashrc中的别名问题

9

我在 .bashrc 文件中创建了一个别名:

alias java='java -Xmx1200m'

当我直接从shell运行java命令时,这个别名可以工作。

然而,当java命令在bash脚本(script.sh)中时,这个别名不会被激活。我该如何确保.bashrc文件中的别名在bash脚本中被接受?

5个回答

7

非交互式 shell 不会展开别名。

制作别名的唯一方法是使用包含别名的目标脚本来源代码另一个脚本。

$ source .bashrc
$ . custom_script.sh

我的Mac M1只有一种可行的工作方法。 - SKLTFZ

4

引用自bash手册:

当shell不是交互式的时候,别名不会被扩展,除非使用shopt(参见“Shopt内置命令”)设置了expand_aliases shell选项。

在您的脚本中添加以下内容即可使其正常工作:

shopt -s expand_aliases

至少在FreeBSD/OSX上无法工作。expand_aliases已经默认开启。 - Ain Tohvri
2
@AinTohvri,您需要在脚本中运行“source $HOME/.bashrc”。 - devnull
是的,在执行了 shopt -s expand_aliases 之后,我意识到了。现在可以工作了,谢谢! - Ain Tohvri

1
最简单的答案是做两件重要的事情,否则它就不起作用。在您的其他脚本中,请执行以下操作:-i 以交互模式运行,并按照下面提到的 shopt 部分进行操作。
#!/bin/bash -i

# Expand aliases defined in the shell ~/.bashrc
shopt -s expand_aliases

在此之后,您在~/.bashrc中定义的别名将在您的shell脚本(giga.sh或any.sh)以及该脚本中的任何函数或子shell中可用。
如果您不这样做,您将会收到一个错误:
your_cool_alias: command not found

1

别名仅限于shell,并且在执行的shell脚本中无法使用。最好创建一个变量。


.bashrc中使用export java='java -Xmx1200m'怎么样? - fedorqui
如果Shell脚本在用户登录外执行,例如cron任务,它可能无法被调用 - 用户需要使用source命令来加载.bashrc文件。 - V H
@fedorqui 对,但这不会被视为使用别名。它是设置全局变量。 - jaypal singh

0

你可以在交互模式下运行你的脚本,使用bash命令并添加-i参数,就像这个脚本一样。现在你可以使用你的别名。

#!/bin/bash -i 

alias lsd='ls -al | grep ^d' 

lsd 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接