以下を出力するコマンドを使用しました。 。
"Credentials": {
"AccessKeyId": "ASIARKHY6",
"SecretAccessKey": "FHM11kEwWZ",
"SessionToken": "IQoJb3JpZ2luX2",
}
次に、次の3つのキーをそれぞれエクスポートする必要があります。私はこれを手動で実行していますが、スクリプトで書くのが好きです。
コマンドの結果をtmpファイルにパイプして使用できます。
cat tmpfile.tmp |grep AccessKeyId
出力: "SecretAccessKey": "FHM11kEwW6sP3Z"
それでは、2番目の「」セットを持つテキストだけをどのように選択できますか?これでエクスポートできます。
答え1
プログラムの出力をファイルに保存したと仮定すると、次のように "AccessKeyId"キーを使用してtmpfile.tmp
コマンドを使用して、特定のキーに特定の値を抽出できます。sed
key=AccessKeyId;
sed -n 's/^.*\"'$key'\":.*\"\(.*\)\".*$/\1/p' tmpfile.tmp
ASIARKHY6
次のように一時ファイルを作成せずに、プログラムの出力をsedに直接パイプすることもできます。
key=AccessKeyId;
./program | sed -n 's/^.*\"'$key'\":.*\"\(.*\)\".*$/\1/p'
getval.sh
上記の2つの形式のいずれかを次のようにスクリプト(と呼びます)に入れることをお勧めします。
#!/bin/bash
if [ $# -lt 3 ];then echo "usage: $0 <inputfile> <key>"; exit 0 ;fi
infile=$1
key=$2
sed -n 's/^.*\"'$key'\":.*\"\(.*\)\".*$/\1/p' $infile
実行可能にしたら、次のように実行できます。
./getval.sh tmpfile.tmp AccessKeyId
答え2
実行するコマンドが資格情報JSON出力を出力する必要があるとします。ツールを使用できますjq
。
例えば
creds_json=$(substitute the command which you used to output the credentials)
export AWS_ACCESS_KEY_ID=$(echo "$creds_json" | jq -r .credentials.accessKeyId)
export AWS_SECRET_ACCESS_KEY=$(echo "$creds_json" | jq -r .credentials.secretAccessKey)
export AWS_SESSION_TOKEN=$(echo "$creds_json" | jq -r .credentials.sessionToken)
答え3
Credentials
入力が最上位キーの1つとしてキーを持つよく構成されたJSONドキュメントであるとします。
{
"Otherinfo": "blah blah",
"Credentials": {
"AccessKeyId": "ASIARKHY6",
"SecretAccessKey": "FHM11kEwWZ",
"SessionToken": "IQoJb3JpZ2luX2",
"SecretStuff": "njahnjah"
}
}
その後、次のようにサブキーの値を抽出できます。
eval "$(
jq -r '
$ARGS.positional[] as $key | @sh "export \($key)=\(.Credentials[$key])"' file \
--args AccessKeyId SecretAccessKey SessionToken
)"
上記の入力を使用すると、次のシェルコマンドが生成され評価されます。
export 'AccessKeyId'='ASIARKHY6'
export 'SecretAccessKey'='FHM11kEwWZ'
export 'SessionToken'='IQoJb3JpZ2luX2'
代わりに式で$key|ascii_upcase
in を使用すると、大文字の変数名を取得できます。$key
jq
ファイル以外のコマンドから読み込む場合は、パイプを使用してください。
eval "$(
some-command |
jq -r '
$ARGS.positional[] as $key | @sh "export \($key|ascii_upcase)=\(.Credentials[$key])"' \
--args AccessKeyId SecretAccessKey SessionToken
)"
答え4
出力を二重引用符で囲みたいとします。
使用sed
$ export AccessKeyId=$(sed -n s'/.*AccessKeyId[^"]*\("[^"]*"\).*/\1/p' input_file)
使用grep
$ export AccessKeyId=$(grep -Po '.*AccessKeyId[^"]*\K"[^"]*"' input_file)
使用awk
$ export AccessKeyId=$(awk -F": |," '/AccessKeyId/{print $2}' input_file)
出力
"ASIARKHY6"