因此,我正在尝试通过如下的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')由于$arch中的$符号,在第二次run()调用时会出现此问题。此fabric函数在第2行失败,因为fabric将$后跟一个字符串识别为配置变量。但我实际上希望将$arch理解为
bash shell中的echo 'echo "Server = http://repo.archlinux.fr/$arch" >> /etc/pacman.conf'调用。
如何从这种fabric怪癖中“逃脱”,并将$arch指定为要写入pacman.conf文件的文字?
发布于 2012-04-18 11:01:54
使用带单引号的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
0https://stackoverflow.com/questions/10202162
复制相似问题