5

所以我试图通过这样的python结构脚本自动设置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此结构函数在第 2 行失败,因为结构将 $ 后跟字符串识别为配置变量。但我实际上希望 $arch 被理解为

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

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

4

1 回答 1

4

使用带单引号的 echo。这将防止外壳膨胀 $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
于 2012-04-18T03:01:53.793 回答