- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Fabric 中,当我尝试使用我的 .bash_profile
文件中的任何别名或函数时,它们无法被识别。例如,我的 .bash_profile
包含 alias c='workon django-canada'
,所以当我在 iTerm 或终端中键入 c
时, workon django-canada
被执行。
我的 fabfile.py
包含
def test():
local('c')
但是当我尝试 fab test
时,它向我抛出这个: [本地主机] 本地:c
/bin/sh: c: command not found
Fatal error: local() encountered an error (return code 127) while executing 'c'
Aborting.
其他 Fabric 函数工作正常。我必须在结构中的某处指定我的 bash 配置文件吗?
最佳答案
编辑 - 事实证明,这已在 Fabric 1.4.4 中修复。来自变更日志:
[Feature] #725: Updated local to allow override of which local shell is used. Thanks to Mustafa Khattab.
所以原来的问题会这样解决:
def test():
local('c', shell='/bin/bash')
我在下面留下了我原来的答案,它只与 Fabric 版本 < 1.4.4 有关。
因为本地不使用 bash。您可以在输出中清楚地看到它
/bin/sh: c: command not found
看到了吗?它使用 /bin/sh
而不是 /bin/bash
。这是因为 Fabric 的 local
命令在内部的行为与 run
略有不同。 local
命令本质上是 subprocess.Popen
python 类的包装器。
http://docs.python.org/library/subprocess.html#popen-constuctor
这就是你的问题。 Popen 默认为 /bin/sh
。如果您自己调用 Popen 构造函数,则可以指定不同的 shell,但您是通过 Fabric 使用它。不幸的是,Fabric 无法让您传入 shell,例如 /bin/bash
。
抱歉,没有为您提供解决方案,但它应该可以回答您的问题。
编辑
这是有问题的代码,直接从 operations.py
文件中定义的 fabric 的 local
函数中提取:
p = subprocess.Popen(cmd_arg, shell=True, stdout=out_stream,
stderr=err_stream)
(stdout, stderr) = p.communicate()
如您所见,它不会为可执行关键字传递任何内容。这会导致它使用默认值,即/bin/sh。如果它使用 bash,它看起来像这样:
p = subprocess.Popen(cmd_arg, shell=True, stdout=out_stream,
stderr=err_stream, executable="/bin/bash")
(stdout, stderr) = p.communicate()
但事实并非如此。这就是为什么他们在本地文档中说以下内容:
local is simply a convenience wrapper around the use of the builtin Python subprocess module with shell=True activated. If you need to do anything special, consider using the subprocess module directly.
关于fabric - 为什么 Fabric 看不到我的 .bash_profile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005348/
我想运行一个名为“showfiles”的命令,该命令将运行命令“defaults write com.apple.finder AppleShowAllFiles TRUE”和“killall Fin
我向 .bash_profile 添加了一些设置,并且关闭/打开终端似乎没有我在那里添加的路径,即执行 echo $BLAH结果为空行。 (运行最新版本的ubuntu) 我应该改用 .profile
我试图在终端中自定义提示。为此,我尝试使用vim编辑.bash_profile,但最终得到了.bash_profile.swp文件。在网上找到一些帖子之后,我在vim中使用了:recover命令,该命
因此,我正在安装一些用于编码和个人使用的东西,并且需要在终端中运行它(如果您未阅读标题,则在Mac上运行)。 ~/.bash_profile 它只是说允许被拒绝,我正在运行OSX 10.8.4 Mou
我的 .bash_profile 中有一些简单的别名(OS X El Capitan,10.11.6)。有时,我想要多个别名来做同样的事情。例如,我有一个文件夹,它是我编程项目的起点。目前,我有一个代
我正在尝试在Mac上使用Eclipse/Maven进行开发,并且在设置环境变量时没有.bash_profile。我做ls -a,现在还不在那里。我看到一个.bash_history和.bash_ses
我在 中设置了一些别名.bash_profile 在我的 Max OS X 上。 它有效,但是当我打开一个新标签时,我总是必须加载我的 .bash_profile 文件与此命令: source ~/.
我在 ~/.bash_profile 中设置了一个别名,如下所示: alias lcmt="git show $(git log --oneline | awk '{print $1;}' | hea
这个问题在这里已经有了答案: Make a Bash alias that takes a parameter? (24 个答案) 关闭 4 年前。 我正在尝试创建一个别名,它将创建一个文件并在 V
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: How do I find .bash_profile and add to my shell's init
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在我的 Mac OS X 上向我的 .bash_profile 添加了一些东西,但它们给出了一个错误。这是我现在启动终端时的全部文本日志: Last login: Thu Oct 25 23:10:
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
如何重新加载文件 .bash_profile从命令行? 我可以通过退出并重新登录让 shell 识别对 .bash_profile 的更改,但我希望能够按需执行此操作。 最佳答案 只需输入 sourc
我正在尝试从别名 (macosx) 执行 python 文件。 这可能吗? alias execute ='python path/file.py' 我正在尝试这样,但不起作用,有什么建议吗? 谢谢
我正在使用 CentOS。我从 rpm 安装了 Java8。 按照教程我这样做了: export JAVA_HOME=jdk-install-dir export PATH=$JAVA_HOME/bi
我正在尝试使用此链接中的第 5 步安装 Python 虚拟环境 Install OpenCV 3 on macOS with Homebrew (the easy way) 我在正确配置这个文件时遇到
我已经安装了 Hadoop,每次我想运行它时,首先我必须这样做: source ~/.bash_profile 否则它不会识别命令 hadoop 这是为什么? 我在 OSX 10.8 上 最佳答案 现
您好,我在远程设备上运行 linux angstrom 发行版,我将 .bash_profile 和 .bashrc 添加到/home/root,因为它们不存在,我在其中写了这个 PATH=/opt/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 4 年前。 这个问题似乎不是关于 a specific programming problem,
我是一名优秀的程序员,十分优秀!