场景:需要向/etc/default/docker文件追加一行文字:
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://b53a2938.m.daocloud.io"
其中双引号和$是特殊字符,难度主要提现在如何转意这两个字符上。
普通用户通过Shell达到目标的方法是:
echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://b53a2938.m.daocloud.io\"" | sudo tee -a /etc/default/docker
root用户使用Shell的方法是:
echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://b53a2938.m.daocloud.io\"" >> /etc/default/docker
Fabric的实现方法是:
sudo('echo "DOCKER_OPTS=\\\\"\\\$DOCKER_OPTS '
'--registry-mirror=http://b53a2938.m.daocloud.io\\\\"" '
'>> /etc/default/docker')
或者用raw string:
sudo(r'echo "DOCKER_OPTS=\\"\\$DOCKER_OPTS --registry-mirror='
r'http://b53a2938.m.daocloud.io\\"" >> /etc/default/docker')