Список аргументов слишком длинный для / bin / aws

Я работаю над сценарием, который будет перебирать текстовый файл, настроенный как таковой:

snap-foo    bar     20170202

Этот текстовый файл в основном имеет идентификаторы снимков, тег, который мы используем для идентификации экземпляров связанный, и отметка времени, когда снимки были созданы в AWS. Я почти закончил свой сценарий, но я продолжаю получать ошибку при работе над последней частью:

#!/bin/bash

THIRTY_DAYS_AGO=$(date --date '30 days ago' "+%Y%m%d")
FILE=/home/rkahil/sorted_snaps.txt

for a in $FILE
do
        SNAP_ID=`awk {'print $1'} "$FILE"`
        FORMAT_FILE=`sed -i 's/T.*//' "$FILE"`
        TIMESTAMP_SNAPS=`cat "$FILE" | awk {'print $3'}`
        if [[ "$FORMATTED_DATE" -lt "$THIRTY_DAYS_AGO" ]];
        then
                aws ec2 delete-snapshot --dry-run "$SNAP_ID" #Where the error is
        fi
done

Я получаю следующую ошибку:

./removeOldSnapShots.sh: line 13: /usr/bin/aws: Argument list too long

Может ли кто-нибудь сказать мне, как правильно это сделать?

-1
22.03.2017, 23:53
1 ответ

Вы не перебираете содержимое файла, а обрабатываете все его содержимое за один раз; в частности, SNAP_ID в итоге содержит весь первый столбец, что, очевидно, слишком много для использования в одной команде.

Вам нужно обрабатывать файл построчно, используя что-то вроде

< "$FILE" while read SNAP_ID _ TIMESTAMP_SNAPS; do
    if ...
done

Существует ряд предостережений при использовании read, связанных с влиянием читаемого содержимого (специальные символы, обратные слеши и т.д.), о которых вам, вероятно, стоит прочитать, если вы хотите применить эту технику более широко. Оболочка на самом деле не является хорошим инструментом для обработки файлов...

2
28.01.2020, 05:08

Теги

Похожие вопросы