다음 명령 세트가 있습니다.
s3ls="aws s3 ls $ssyss3/ --recursive --human-readable --summarize"
egrepCommand="egrep '$currentDate|Total'"
totalSize=$(echo $s3ls|$egrepCommand| awk -F 'Total Size:' '{print $2}'|sed '/^$/d')
echo $totalSize
하지만 다음 오류가 발생합니다.
egrep '2019-05-11|Total': command not found
내가 무엇을 놓치고 있나요?
답변1
주석에 적힌 그대로입니다. 명령 이름을 만든 egrep '2019-05-11|Total'
다음 호출해 봅니다. egrep
다음에는 인수가 아니라 전체 명령 이름이 옵니다 . 당신이 원하는 것은 다음과 같을 가능성이 더 높습니다:
totalSize=$(echo $s3ls| egrep "$currentDate|Total" | awk -F 'Total Size:' '{print $2}'|sed '/^$/d')
필요한 경우 변수를 사용하여 매개변수를 보유할 수 있습니다.
egrepParm="$currentDate|Total"
totalSize=$(echo $s3ls| egrep "$egrepParm" | awk -F 'Total Size:' '{print $2}'|sed '/^$/d')
어떤 사람들은 스크립트에서 grep -E
대신 사용하는 것이 더 낫다고 말합니다.egrep
추신: alias 명령은 명령 프롬프트/터미널에서는 작동하지만 스크립트에서는 작동하지 않으므로 터미널에서 명령을 시도한다고 해서 스크립트에서 작동한다는 것이 증명되지는 않습니다. Bash에서는 type {commandname}
이름이 실제 명령인지 별칭인지 확인하는 데 사용됩니다. egrep
이것은 일부 Unix 버전에서 별칭으로 사용할 수 있으며, Ubuntu에서는 일반적인 명령입니다.