5

そこで、次のような 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()の$ 記号が原因で、2 回目の呼び出しで問題が発生し$archます。$ に続く文字列が構成変数としてファブリックによって認識されるため、このファブリック関数は 2 行目で失敗します。しかし、私は実際には $arch がリテラルとして理解されることを望んでいます

echo 'echo "Server = http://repo.archlinux.fr/$arch" >> /etc/pacman.conf'bash シェルで呼び出します。

このファブリックの癖から「脱出」して、$arch を pacman.conf ファイルに書き込むリテラルとして指定するにはどうすればよいですか?

4

1 に答える 1

4

一重引用符でエコーを使用します。これにより、シェルが拡張するのを防ぎ $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
于 2012-04-18T03:01:53.793 に答える