![](/img/trans.png)
[英]Escaping Bash wildcards when executing python script from bash script?
[英]“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.