2017-12-06 7 views
0

シェルスクリプトの新機能。 RHEL 6.9のLinuxサーバーでシェルスクリプトを使用してaws cliを使用してファイル名に空白を含むファイルをAWS S3にアップロードしようとしました。AWS CLI S3 cpシェルスクリプトで引用符付きのソースとターゲットを認識しない

#!/bin/bash 
profile=" --profile XXXXXXX" 
sourcefile=" '/home/my_login/data/batch4/Test File (1).zip'" 
targetobject=" 's3://my-bucket/TestFolder/batch4/Test File (1).zip'" 
service=" s3" 
action=" cp" 
encrypt=" --sse" 
func="aws" 
awsstring=$func$profile$service$action$sourcefile$targetobject$encrypt 
echo $awsstring 
$awsstring 

私は私が手を実行します:私はここで問題と私のスクリプトの簡単なバージョンがあり、単一および二重引用符を試してみましたし、http://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html

ようにAWS CLIのリンクを読んでてきた

$ ./s3copy.sh 
aws --profile XXXXXXX s3 cp '/home/my_login/data/batch4/Test File (1).zip' 's3://my-bucket/TestFolder/batch4/Test File (1).zip' --sse 

Unknown options: (1).zip','s3://my-bucket/TestFolder/batch4/Test,File,(1).zip' 

私は、コマンドラインからの$ awsstring値を実行すると、それが動作:

$ aws --profile XXXXXXX s3 cp '/home/my_login/data/batch4/Test File (1).zip' 's3://my-bucket/TestFolder/batch4/Test File (1).zip' --sse 
upload: data/batch4/Test File (1).zip to s3://my-bucket/TestFolder/batch4/Test File (1).zip 

aws cliはシェルスクリプトの引用符を認識していないようです。私はスクリプト内のファイル名を引用する必要があります。なぜなら、その中に空白があるからです。
質問:文字列はコマンドラインから正しく実行されますが、シェルスクリプト内から正しく実行されないのはなぜですか?

答えて

0

eval $awsstringを使用してください。私は同様の問題に直面した。あなたは私の答えを見ることができます - https://stackoverflow.com/a/47111888/2396539

ファイル名にスペースがあるという第2の考えでは望ましくなく、あなたがそれを制御できるなら、1位で避けてください。

+1

あなたの "評価"はそれを解決しました - ありがとう!ええ - 私の必要条件は、既存のファイル名を空白で使用することです。それがどうなるか見る – BilboC

関連する問題