2013-12-23 46 views
0

我是新来的织物和粗糙的边缘与蟒蛇。 我正在努力编写一个更新带有公共gpg密钥环ID的文件的小脚本。Fabric支持命令替换吗?

在伪代码:

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' 

回答

0

第一,GPG命令可以通过

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

更换更换GPG键 “085C042B” 的GPG输入所有* .conf文件。

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 
+0

谢谢,我试过了,但我不认为我正确地集成到结构的语法。问题的更新是我目前的代码,但我仍在试验。任何进一步的建议感激谢谢! –