
Eu tenho esta parte do shell script:
#!/bin/bash
shopt -s extglob
currentDate=$(date +%F)
echo $currentDate
command="grep $currentDate"
gcs3='s3://gc-reporting-pud-production/splunk_printer_log_files'
gcs3ls='aws s3 ls 's3://gc-reporting-pud-production/splunk_printer_log_files/SOUTH_ASIA/' --recursive '
ssyss3=s3://ssyssplunk
gcs3Current=$($gcs3ls|$command|sed 's/^.*\(splunk_printer.*\)/\1/g')
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
s3ls='aws s3 ls --human-readable --summarize 's3://ssyssplunk/' --recursive'
echo "ls: " $s3ls
egrepCommand="'$currentDate|Total'"
echo "grep: " $egrepCommand
totalSize=$($s3ls|egrep $currentDate\|Total|awk -F 'Total Size:' '{print $2}'|sed '/^$/d')
echo "total size: " $totalSize
IFS=$SAVEIFS
e estou recebendo este erro:
27/05/2019 ls: aws s3 ls --human-readable --summarize s3://ssyssplunk/ --recursive grep: '2019-05-27|Total' ./copyFilesFromS13.sh: linha 54: aws s3 ls --human-readable --summarize s3://ssyssplunk/ --recursive: Tamanho total de arquivo ou diretório inexistente:
O que estou fazendo de errado ?
Responder1
Você configurou IFS apenas para nova linha e retrocesso. Assim, $s3ls
após expansão e divisão de palavras, será aws s3 ls --human-readable --summarize s3://ssyssplunk/ --recursive
considerado uma única palavra. Bash tenta executar esta única palavra como um comando, em vez de executar aws
com vários argumentos.
Você realmente não deveria armazenar comandos em variáveis.Use matrizes, em vez disso:
s3ls=(aws s3 ls --human-readable --summarize 's3://ssyssplunk/' --recursive)
#...
totalSize=$("${s3ls[@]}" | ...)