首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从python fabric执行远程bash命令时“转义”$

从python fabric执行远程bash命令时“转义”$
EN

Stack Overflow用户
提问于 2012-04-18 10:56:18
回答 1查看 3.4K关注 0票数 5

因此,我正在尝试通过如下的python fabric脚本自动设置一个arch linux实例:

代码语言:javascript
复制
from fabric.api import run, sudo

def server_setup_communityrepo():
    run('echo \'echo "[archlinuxfr]" >> /etc/pacman.conf\' | sudo -s')
    run('echo \'echo "Server = http://repo.archlinux.fr/$arch" >> /etc/pacman.conf\' | sudo -s')
    run('echo \'echo " " >> /etc/pacman.conf\' | sudo -s')
    sudo('pacman -Syy yaourt --noconfirm')

由于$arch中的$符号,在第二次run()调用时会出现此问题。此fabric函数在第2行失败,因为fabric将$后跟一个字符串识别为配置变量。但我实际上希望将$arch理解为

bash shell中的echo 'echo "Server = http://repo.archlinux.fr/$arch" >> /etc/pacman.conf'调用。

如何从这种fabric怪癖中“逃脱”,并将$arch指定为要写入pacman.conf文件的文字?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-18 11:01:54

使用带单引号的echo。这将阻止shell扩展$arch

代码语言:javascript
复制
run('echo \'Server = http://repo.archlinux.fr/$arch\' | sudo -s tee -a /etc/pacman.conf')

这应该等同于

代码语言:javascript
复制
echo 'Server = http://repo.archlinux.fr/$arch' | sudo -s tee -a /etc/pacman.conf

快速测试:

代码语言:javascript
复制
>>> import os
>>> os.system('echo \'Server = /foo/$arch\' ')
Server = /foo/$arch
0
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10202162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档