我在~/.bash_aliases
远程 ubuntu 服务器上的文件中有别名。该文件以标准方式从文件中加载~/.bashrc
,如下所示:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
该~/.bashrc
文件依次从~/.profile
如下所示的文件中加载(也以标准方式):
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
source ~/.bashrc
echo ".profile loaded .bashrc"
fi
fi
mesg n
我发现我的别名在我的结构命令中不可用,例如当我在结构脚本中执行此操作时:
run("aliased_command")
我得到这个输出:
run: aliased_command
out: .profile loaded .bashrc
out: /bin/bash: aliased_command: command not found
Fatal error: run() encountered an error (return code 127) while executing 'aliased_command'
现在,我通过使用 ssh 登录服务器并运行,设法在结构之外重现了这一点:
~# /bin/bash -l -c aliased_command
从外壳(nb/bin/bash -l -c
是织物的默认值,请参见此处)我得到相同的输出:
.profile loaded .bashrc:
/bin/bash: aliased_command: command not found
在对相关主题进行了相当多的搜索之后,我在某处读到没有为非交互式 shell 导出别名,然后我设法使用/bin/bash -l -c -i
(-i
将 bash 设置为交互模式)解决了这个问题。
然后我将以下内容添加到我的 fabfile.py 中:
env.shell = "/bin/bash -l -c -i"
现在我可以在我的结构命令中使用别名......太好了!
所以我的问题是:
这个解决方案有什么问题吗?如果是这样,我该怎么办?
是否有其他人在他们的 fabfile 中运行别名时遇到问题?
有什么明显的原因可以解释为什么我可能会遇到这个问题而其他人不会?
谁能指出我描述这个问题和解决方案的链接等?并解释他们是如何找到他们的...... :)