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


8

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

alias python=~/virtualenv/bin/python

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

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

是否可以在不更改脚本的情况下使脚本使用别名python而不是在脚本中python找到的别名$PATH


4
出于兴趣,为什么不能更改PATH?更改PATH并将其放在#!/usr/bin/env pythonpython脚本的顶部似乎更容易。
Mikel

@Mikel这甚至比您的其他答案还要好。但是不能接受评论。
phunehehe 2011年

我更新了答案以包含该建议。
Mikel

Answers:


7

是。

如果您将别名放在中~/.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为第一行会更容易。


您不是~/.bashenv在步骤4中表示吗?
cjm 2011年

因此,无论如何我都必须将脚本从更改#!/bin/sh#!/bin/bash?我可以做bash my-script吗?
phunehehe 2011年

phunehehe:是的,bash my-script如果您仍然执行第1-4步,我认为这将起作用。
Mikel

我不建议在脚本中使用别名。如果其他人运行您的脚本,或者您使用sudo或其他特权提升方法运行该脚本,则将无法使用。而且它不允许你改变virtualenv每个执行,这将是没有的要点~/virtualenv/bin在你的PATH永久。PATH最好在需要时将目录添加到the前面。
吉尔(Gilles)“所以

4

假设您的别名文件是“ 〜/ .bash_aliases ”,请将其放在脚本中:

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

通过


0

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

alias rm='moveToTrash'

moveToTrash在您的程序中是一个程序/usr/bin。现在,您有一个名为以下脚本test.bash

#!/bin/bash

which rm

如果test.bash是直接执行,你可以看到输出/bin/rm,同时source test.bash将获得输出

alias rm='moveToTrash'
    /usr/bin/moveToTrash
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.