«Эскапирование» $ при выполнении удаленной команды bash из python fabric

Итак, я пытаюсь автоматизировать настройку экземпляра arch linux с помощью скрипта Python Fabric вот так:

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. Эта функция ткани не работает в строке 2, потому что $, за которым следует строка, распознается тканью как переменная конфигурации. Но я на самом деле хочу, чтобы $arch понимался как литерал в вызове

echo 'echo "Server = http://repo.archlinux.fr/$arch" >> /etc/pacman.conf'в оболочке bash.

Как мне «убежать» от этой причуды ткани и назначить $arch литералом для записи в мой файл pacman.conf ?

5
задан Calvin Cheng 18 April 2012 в 03:12
поделиться