Job*_*Job 11 ubuntu alias fabric
我在~/.bash_aliases远程ubuntu服务器上的文件中有别名.该文件以标准方式从文件加载~/.bashrc,如下所示:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Run Code Online (Sandbox Code Playgroud)
该~/.bashrc文件依次从~/.profile文件加载(也以标准方式),如下所示:
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
source ~/.bashrc
echo ".profile loaded .bashrc"
fi
fi
mesg n
Run Code Online (Sandbox Code Playgroud)
我发现我的别名在我的结构命令中不可用,例如当我在结构脚本中执行此操作时:
run("aliased_command")
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
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'
Run Code Online (Sandbox Code Playgroud)
现在,我设法通过使用ssh登录到服务器并在运行:
~# /bin/bash -l -c aliased_command
Run Code Online (Sandbox Code Playgroud)
从shell(nb /bin/bash -l -c是结构的默认值,见这里)我得到相同的输出:
.profile loaded .bashrc:
/bin/bash: aliased_command: command not found
Run Code Online (Sandbox Code Playgroud)
在对相关主题进行了相当多的搜索后,我在某处读到了不为非交互式shell导出别名,然后我设法使用/bin/bash -l -c -i(-i将bash设置为交互模式)来修复此问题.
然后我将以下内容添加到fabfile.py中:
env.shell = "/bin/bash -l -c -i"
Run Code Online (Sandbox Code Playgroud)
现在我可以在我的结构命令中使用别名......太棒了!
所以我的问题是:
这个解决方案有什么问题吗?如果是这样,我该怎么办?
有没有其他人在他们的fabfiles中运行别名有问题?
我有没有明显的理由可能会遇到这个问题而其他人不会这样做?
谁能指出我描述这个问题和解决方案的链接等?并解释他们是如何找到他们的...... :)
Job*_*Job 25
这是主要问题的快速答案,为了节省一些人阅读我的长问题,只需添加
env.shell = "/bin/bash -l -i -c"
Run Code Online (Sandbox Code Playgroud)
到你的fabfile.py,你应该能够在你的Fabric命令中使用别名!
是的,您完全正确,默认情况下,非交互式会话中的bash shell不会扩展别名.
请参见手册页中的别名部分:http://linux.die.net/man/1/bash
当shell不是交互式时,别名不会扩展,除非使用shopt设置expand_aliases shell选项(请参阅下面的SHELL BUILTIN命令下的shopt说明).
因此,为了在非交互式会话中发生这种情况,请将其包含在您的.profile.
shopt -s expand_aliases
Run Code Online (Sandbox Code Playgroud)
这将使非交互式会话和结构脚本中的别名可用,而无需借助交互式会话.
| 归档时间: |
|
| 查看次数: |
2981 次 |
| 最近记录: |