[英]AWS CLI command inside bash script can't locate file
我需要根據一些要求將文件數量從一台服務器移到S3中:
所以這就是我所擁有的,它還不完整,因為從腳本內運行命令時我在定位文件時遇到了問題,而在原始運行命令時卻可以工作。
如何使腳本從此腳本中找到$ source文件? 另外,還有更好的方法嗎?
命令:
aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'
錯誤:
script.sh: line 20: aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4': No such file or directory
碼:
#!/bin/bash
aws_bucket='s3://s3-public/'
home='/home/user/'
files='/var/www/files/'
input="${home}videos_list.txt"
output="${home}videos_done.txt"
videos_list='()'
videos_done='()'
arrays_hydrate() {
mapfile -t videos_list < "$input"
mapfile -t videos_done < "$output"
}
aws_init() {
for index in "${!videos_list[@]}"
do
source="${videos_list[$index]}"
destination=$( echo "${videos_list[$index]}" | sed -e "s#^$files##" )
length="${#source}"
if [ "$length" -ne "0" ]; then
command="aws s3 cp '${source}' '${aws_bucket}${destination}'"
echo "$command"
$( "$command" ) &
fi
done
}
init() {
arrays_hydrate
aws_init
}
init
exit 0
如果command
參數包含aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'
(如您aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'
),則此操作:
$( "$command" ) &
等效於此:
$( "aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'" ) &
顯然這不是您想要的:您沒有任何名為aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'
。
相反,您想使用參數s3
, cp
, /var/www/files/folder/file1.mp4
s3://s3-public/folder/file1.mp4
和s3://s3-public/folder/file1.mp4
來調用aws
程序:
command=(aws s3 cp "$source" "$aws_bucket$destination")
echo "${command[@]}"
"${command[@]}" &
(其中parameter_name =( value value value value )
表示法將名為parameter_name
的參數設置為包含指定值的數組變量 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.