从python结构执行远程bash命令时"转义"$

Cal*_*eng 5 python bash fabric

所以我试图通过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 Code Online (Sandbox Code Playgroud)

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

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

如何从这个结构怪癖中"逃脱",并将$ arch指定为要写入我的pacman.conf文件的文字?

c00*_*ter 4

使用带单引号的 echo。这将防止外壳膨胀 $arch

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

这应该相当于

echo 'Server = http://repo.archlinux.fr/$arch' | sudo -s tee -a /etc/pacman.conf
Run Code Online (Sandbox Code Playgroud)

快速测试:

>>> import os
>>> os.system('echo \'Server = /foo/$arch\' ')
Server = /foo/$arch
0
Run Code Online (Sandbox Code Playgroud)