2013-12-23 72 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

謝謝,我試過了,但我不認爲我正確地集成到結構的語法。問題的更新是我目前的代碼,但我仍在試驗。任何進一步的建議感激謝謝! –