script bash com comando grep não

script bash com comando grep não

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, $s3lsapós expansão e divisão de palavras, será aws s3 ls --human-readable --summarize s3://ssyssplunk/ --recursiveconsiderado uma única palavra. Bash tenta executar esta única palavra como um comando, em vez de executar awscom 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[@]}" | ...)

informação relacionada