加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 22:03:19 所属栏目:Python 来源:网络整理
导读:所以我试图通过python结构脚本自动化建立一个arch linux实例,如下所示: from fabric.api import run,sudodef server_setup_communityrepo(): run('echo 'echo "[archlinuxfr]" /etc/pacman.conf' | sudo -s') run('echo 'echo "Server = http://repo.arch

所以我试图通过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')

由于$arch中的$符号,在第二次run()调用时会出现此问题.此结构函数在第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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读