我可以让脚本使用别名而不是命令吗?

我可以让脚本使用别名而不是命令吗?

我有一个命令的别名(我正在设置 Python 开发环境)

alias python=~/virtualenv/bin/python

这样我~/virtualenv/bin/python只需输入即可运行python。现在我的项目中有一个 shell 脚本,例如:

#!/bin/sh
python run-project.py

我可以让脚本使用我的别名python而不是它python在 中找到的别名$PATH,而不对脚本进行更改吗?

答案1

是的。

如果你把你的别名放进去~/.aliases,那么你可以这样做

export BASH_ENV="~/.aliases"
somescript

这假设您的脚本以 开头#!/bin/bash,因为#!/bin/sh有点难以预测。

这是我的建议:

  1. 创建~/.bashenv
  2. 将您想要在脚本中使用的所有设置从 ~/.bashrc 移至 ~/.bashenv
  3. 将其添加到 ~/.bashrc 的顶部:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. 放入BASH_ENV=~/.bashenv/etc/environment
  5. #!/bin/bash如果您的脚本尚未启动,请让它们以

或者,如果您使用 zsh,只需将别名移至 ~/.zshenv 即可。 zsh 自动查找该文件。


但也许更容易放在~/virtualenv/bin的前面PATH,然后更改 Python 脚本以将其#!/usr/bin/env python作为第一行。

答案2

假设您的别名文件是“~/.bash_别名”,将其放入您的脚本中:

#!/bin/bash
shopt -s expand_aliases
source ~/.bash_aliases
python run-project.py

通过

答案3

或者,您始终可以source在脚本中强制使用别名。例如,假设rm您的 中有一个别名~/.bashrc

alias rm='moveToTrash'

whilemoveToTrash是您的/usr/bin.现在您有一个名为test.bash如下的脚本:

#!/bin/bash

which rm

test.bash直接执行时,可以看到输出/bin/rm,whilesource test.bash会得到输出

alias rm='moveToTrash'
    /usr/bin/moveToTrash

相关内容