(BASH) Передача переменной цикла в команду, которая будет сохранена в переменной - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь перебрать построчный список строк идентификаторов файлов (testIDs.txt) и передать их команде AWS. В команде должна использоваться переменная цикла, а выходные данные команды должны храниться в переменной «папка». Всякий раз, когда я запускаю скрипт, я получаю пробелы в качестве вывода в терминале.

#!bin/bash

while read p; do
    folder=$(aws s3 ls s3://a-bucket/ --recursive | grep "${p}" | cut -c 32-)
    echo "${folder}"
done < testIDs.txt    

Вывод команды AWS должен состоять из двух строк, и я проверил, что это так, запустив строку AWS отдельно в терминале и используя строку вместо ${p}.

Примечание: сейчас я просто хочу напечатать folder, но позже я передам folder в другой цикл.

1 Ответ

0 голосов
/ 25 августа 2018

Возможно, вы захотите просто использовать два цикла for, (1) считывать содержимое сегмента в temp (необязательно / может искать его напрямую), (2) проходить через идентификаторы и (3) проходить через каждую строку сегмента иищите идентификатор.

Пример:

Считайте структуру папок в локальном файле temp, затем для каждого идентификатора посмотрите на строку проверки файла для идентификаторов testID и напечатайте их в файл результатов.

#!bin/bash
TMP="/tmp/s3-log-${RANDOM}.dat"
RESULTS="/tmp/s3-log-results.txt"
ID_FILE="testIDs.txt"

> "${RESULTS}"
aws s3 ls s3://a-bucket/ --recursive > "${TMP}"
while read p; do
    while IFS= read -r line ;do
        if ! [[ $line = *"${p}"* ]]; then
            echo "id: ${p} => $(echo ${line} | cut -c 32-)"  | tee -a "${RESULTS}"
        fi
    done < "${TMP}"        
done < "${ID_FILE}"
...