python - "Escaping"$ 从 python fabric 执行远程 bash 命令时

标签 python bash fabric

所以我正在尝试通过像这样的 python fabric 脚本自动设置 arch linux 实例:

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')

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

中被理解为文字

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

我如何“逃避”这种结构怪癖并将 $arch 指定为要写入我的 pacman.conf 文件的文字?

最佳答案

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

run('echo \'Server = http://repo.archlinux.fr/$arch\' | sudo -s tee -a /etc/pacman.conf')

这应该等同于

echo 'Server = http://repo.archlinux.fr/$arch' | sudo -s tee -a /etc/pacman.conf

快速测试:

>>> import os
>>> os.system('echo \'Server = /foo/$arch\' ')
Server = /foo/$arch
0

关于python - "Escaping"$ 从 python fabric 执行远程 bash 命令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202162/

相关文章:

python - 绑定(bind)到 Python 中的 Pig STORE 或 DUMP 输出

python - 在 Saxon/C 中使用条件包含/静态参数?

python - 创建类似 MS Office 文档的文件格式以公开文档属性

linux - 打开屏幕在bash文件中获取PID

python - 我可以阻止fabric 提示我输入sudo 密码吗?

python - 将 sphinx autodoc 用于 fabfile

python - OpenCV-Python - 如何在使用校准函数时格式化 numpy 数组

linux - 使用“查找”命令剪切日期以选择日期

bash - 通过SSH运行多行bash命令不起作用

python - 如何在 Fabric 文件中设置目标主机