我在远程 ubuntu 服务器上的 ~/.bash_aliases
文件中有别名。该文件以标准方式从 ~/.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 登录服务器并运行来在 fabric 外部重现此内容:
~# /bin/bash -l -c aliased_command
从 shell(n.b. /bin/bash -l -c
是 fabric 的默认值,参见 here)我得到相同的输出:
.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"
现在我可以在我的结构命令中使用别名了……太棒了!
所以我的问题是:
这个解决方案有什么问题吗?如果是这样,我应该做什么?
还有其他人在他们的 fab 文件中运行别名有问题吗?
有什么明显的原因可以解释为什么我可能会遇到这个问题而其他人不会?
任何人都可以指出描述此问题和解决方案的链接等吗?并解释他们是如何找到它们的……:)
最佳答案
这是对主要问题的快速回答,以节省阅读我的长问题的人,只是 添加
env.shell = "/bin/bash -l -i -c"
添加到您的 fabfile.py 中,您应该能够在您的结构命令中使用别名了!
关于ubuntu - 在 Fabric 脚本中调用 bash 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11272372/