【问题标题】:Does Fabric Support Command Substitution?Fabric 是否支持命令替换?
【发布时间】:2014-01-11 13:07:15
【问题描述】:

我是面料新手,而且 python 的边缘很粗糙。 我正在尝试编写一个小脚本来更新具有公共 gpg 密钥环 ID 的文件。

在伪代码中:

    sed("./conf", 'GPG_KEY='085C042B'', 'GPG_KEY='`commandoutput`', use_sudo=true,backup='')

其中commandoutput 是以下命令的输出:

    bash$ gpg --list-keys | grep pub | grep 4096R | awk '{ print $2}' | cut -d'/' -f2

我正在寻找有关如何完成此任务的建议。 我可以通过管道或捕获结构运行命令的输出吗?

更新 #1: 宝马在下面提供了有用的建议,但我不太确定如何融入面料。这是我现在拥有的:

DUPLY_DIR = "/etc/duply/fullbackup/"
    with cd(DUPLY_DIR):
        GPG_KEY1="085C042B"
        GPG_KEY2="$(gpg --list-keys | awk '/pub/&&/4096R/{split($2,a,"/"); print a[2]}')"
sed("./conf", 'GPG_KEY1', 'GPG_KEY2', use_sudo=true, backup='')

但这会产生错误:

File "/home/fabric/fabfile.py", line 44, in stage_gpg
    GPG_KEY2="$(gpg --list-keys | awk '/pub/&&/4096R/{split($2,a,"/"); print a[2]}')" TypeError: unsupported operand type(s) for /: 'str' and 'str'

【问题讨论】:

    标签: python sed fabric


    【解决方案1】:

    首先,gpg命令可以替换为

    gpg --list-keys |awk '/pub/&&/4096R/{split($2,a,"/");print a[2]}' 
    

    在所有 *.conf 文件中用 gpg 输出替换 GPG 密钥“085C042B”。

    GPG_KEY1="085C042B"
    GPG_KEY2=$(gpg --list-keys |awk '/pub/&&/4096R/{split($2,a,"/");print a[2]}' )
    sed -i "s/$GPG_KEY1/$GPG_KEY2/" *.conf
    

    【讨论】:

    • 谢谢,我试过了,但我认为我没有正确地集成到 Fabric 的语法中。问题的更新是我当前的代码,但我仍在试验。任何进一步的建议表示赞赏。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多