使别名在 shell 脚本中起作用吗?

使别名在 shell 脚本中起作用吗?

因此,我的系统上没有可用的 python 命令,但我有 python3。所以我安装了它alias python=python3,然后就可以执行python test.py而不是仅仅python3 test.py

然后我创建了一个新文件 - test.sh - 其内容如下:

#!/bin/bash
python test.py

在启用该文件的执行权限后,我执行了./test.sh但出现./test.sh: line 2: python: command not found错误。

ps -p $$正在运行 bash,它与我使用 ./test.sh 的 shell 相同。

我也尝试将其放在文件alias python=python3底部~/.bashrc,但没有帮助。

有任何想法吗?

答案1

只有交互式 shell 在启动时读取 ~/.bashrc,因此只有交互式 shell 才会加载您的别名或函数定义。当 shell 作为脚本解释器启动时,它不会加载任何外部“rc”脚本,并且不会定义别名。

此外,即使别名定义为脚本的一部分,在“脚本解释器”模式下,它们的扩展被禁用。(Bash 允许通过“shopt”启用此功能,但最好不要这样做。脚本应该使用函数而不是别名。)

不要使用别名,而是在 $PATH 中的某个位置创建一个实际的“python”可执行文件,通过将其符号链接到 /usr/bin/python3 二进制文件。(~/bin 或 /usr/local/bin 是自定义可执行文件的传统位置。)

ln -s /usr/bin/python3 /usr/local/bin/python

相关内容