bash スクリプトは grep コマンドで機能しません。

bash スクリプトは grep コマンドで機能しません。

シェルスクリプトの次の部分があります。

#!/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

次のエラーが発生します。

2019-05-27 ls: aws s3 ls --human soluble --summarize s3://ssyssplunk/ --recursive grep: '2019-05-27 | total' ./copyFilesFromS13.sh: line 54: aws s3 ls - -人が読める --summarize s3://ssyssplunk/ --recursive: そのファイルまたはディレクトリなし

私は何が間違っていましたか?

答え1

IFSを改行とバックスペースにのみ設定しました。したがって、拡張と単語の分割後は単一の単語として扱われ$s3lsます。 Bashは複数の引数を使用するのではなく、コマンドでaws s3 ls --human-readable --summarize s3://ssyssplunk/ --recursive単語を実行しようとします。aws

コマンドを変数に保存しないでください。代わりに配列を使用してください:

s3ls=(aws s3 ls --human-readable --summarize 's3://ssyssplunk/' --recursive)
#...
totalSize=$("${s3ls[@]}" | ...)

関連情報