簡體   English   中英

從python結構執行遠程bash命令時“轉義”$

[英]“Escaping” $ when executing a remote bash command from python 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')

由於$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM