ubuntu - 在 Fabric 脚本中调用 bash 别名

标签 ubuntu alias fabric

我在远程 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/

相关文章:

ubuntu - kubernetes build/run.sh 在 ubuntu 16.04 上失败并显示!!! build/../build/common.sh 中的错误 :546

C++:如何返回模板类中定义的别名?

google-app-engine - 如何在 Google Apps 中添加支持 SSL 的别名子域

python - 在后台使用 Fabric 的 Connection.run() 时脚本挂起

python - Fabric:如何对我的 fabfile 进行单元测试?

python - Fabric——使用父模块中的常见任务

ubuntu - 如何在没有 sudo 的情况下启动 gunicorn 服务

eclipse - 使用适用于 Linux 的 Windows 子系统在 eclipse 上设置 Linux gcc 工具链/编译器

linux - 如何找出 ubuntu 中 http_proxy 设置的位置?

macos - 使用通配符在 .zshrc 中获取多个文件