2017-08-26 152 views
0

如何將變量的值傳遞給bash腳本中的命令?將變量的值傳遞給bash腳本中的命令

具體而言,我想創建一個帶有(部分)隨機名稱的AWS S3存儲桶。這是我走到這一步:

#!/bin/bash 
random_id=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 8 | head -n 1) 
bucket_name=s3://mybucket-$random_id 
echo Bucket name: ${bucket_name} 
aws s3 mb ${bucket_name} 

輸出我得到:

Bucket name: s3://mybucket-z4nnli2k 
Parameter validation failed:cket-z4nnli2k 
": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" 

桶名稱正確生成,但aws s3 mb ${bucket_name}失敗。如果我只是運行aws s3 mb s3://mybucket-z4nnli2k則會創建桶,因此我假設aws s3 mb ${bucket_name}不是將bucket_name的值傳遞給aws s3 mb命令的正確方法。

它必須是明顯的東西,但我幾乎沒有shell腳本的經驗,並且無法弄清楚。

如何將bucket_name的值傳遞給aws s3 mb命令?

+1

確定存儲桶名稱是否正確?你的包含一個':',它表示它必須匹配的正則表達式不包含冒號或正斜槓。除此之外,你應該幾乎總是引用你的變量 –

+0

這個[GitHub問題](https://github.com/boto/botocore/issues/680)可能是有用的 – Inian

+4

你有額外的CR,LF和一個空格存儲桶名稱。 –

回答

0

由於上述評論,這是我的工作是什麼:

#!/bin/bash 
random_id=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 8 | head -n 1) 
bucket_name=s3://mybucket-$random_id 
echo Bucket name: ${bucket_name} 
aws s3 mb "${bucket_name}" 

我也不得不對腳本運行dos2unix,顯然有壞換行符。

+0

你寫'echo'的方式,你看不到bucket_name是否有尾隨空格。將其寫爲'echo「存儲桶名稱:'$ bucket_name'」' – user1934428

相關問題