2016-12-06 22 views
1

漠然としたタイトルの種類が、基本的に私は、このエラーメッセージから公開鍵をコピーしている何をする必要があるか:コピーの最後の言葉

W: GPG error: http://ppa.launchpad.net hardy Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EED4D034D81367B9

、残りの値として使用スクリプトのエラーを前方に進めるために修正します。私はGrep、awk、sedなどのツールを使ってこれを行う方法を調べましたが、それらはすべて標準出力からインラインで読み込まずにファイルから入力を読み込むことを伴います。

助けていただけたら幸いです!

+0

あなたとあなたの次のコマンドへの引数/入力として渡すことができる。すなわちxargs-I{}フラグを指定すると、{}は、前のコマンドから返されたキーのプレースホルダになり文字列から 'EED4D034D81367B9'ワードを取得したいですか?それは特定のコマンドのファイル(または)出力に存在していますか?あなたはどちらのシェルを使っていますか? 'bash'がインストールされていますか? – Inian

+0

その文字列は、古い(Ubuntu 8.04)VMで "sudo apt-get update"コマンドを発行した結果の出力です。そして、はい、私はbashをインストールしました - 私はbashスクリプトの一部としてこれをすべて処理しようとしていますので、ユーザにシームレスです。 –

答えて

1

bashツールの組み合わせをxargsと組み合わせて使用​​することができます。コマンドからエラー文字列を受け取ったと仮定すると、tilde (=~)演算子を使用してbashregExにパイプすることができます。あなたが必要なキーの値を取得し、このregExを持つ文字列の平野echoをやっ

.*\ ([[:alnum:]]+)$ 

すなわち。フォーム

$ <command-returning-string> | while IFS= read -r line; do [[ $line =~ .*\ ([[:alnum:]]+)$ ]] && printf "%s\n" "${BASH_REMATCH[1]}"; done 

$ echo "W: GPG error: http://ppa.launchpad.net hardy Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EED4D034D81367B9" | while IFS= read -r line; do [[ $line =~ .*\ ([[:alnum:]]+)$ ]] && printf "%s\n" "${BASH_REMATCH[1]}"; done 
EED4D034D81367B9 

すなわち、コマンドラインで以下のコマンドを実行すると、今、あなたが言ったように、あなたは、パイプライン内の別のコマンドにこのキーを渡したいです。今すぐxargsが救助に来ます。キーは今{}中に存在し、

$ <command-returning-string> | <command-returning-key> | xargs -I{} <your-next-command> {} 
+0

優秀、私はこれを試して、結果を投稿します!基本的には、私はその文字列 "EED4D034D81367B9"で何をしなければならないのですか? sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 解決するにはリポジトリを更新できないというエラーです。他の誰かがもっと良い解決策を知っていない限り! –

+0

@ J.Doe:あなたの最終的なコマンドは '| xargs -I {} sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys {} ' – Inian

+0

@ J.Doe:答えをマークするのを忘れないでください(私の答えの左に小さな目盛り)一度それを働かせてください。 – Inian