Я только что наткнулся на следующую конструкцию bash, я понимаю, что это называется составным списком и что эти три команды cat выполняются в среде подоболочки, чего я не понимаю, так это того, как каналы вписываются туда и, в более общем плане, как это работает. Я был бы очень признателен за пошаговое объяснение.
Это часть сценария генерации двоичного изображения, поэтому я вроде уже знаю, что он делает, но я не понимаю, как он туда попадает:
export DD="dd status=noxfer bs=1k iflag=fullblock"
(
cat $DIR/file1 /dev/zero | $DD count=128
cat $DIR/file2 /dev/zero | $DD count=128
cat $DIR/file3 /dev/zero
) | $DD of=$OUT_FILE count=$SIZE
Какой-нибудь гуру bash может мне помочь?
Спасибо
]Похоже, что он пытается объединить все три файла в один с прокладками. Первая кошка получает файл плюс /dev/zero, заполненный 128 байтами. То же самое со вторым, а третий просто cat'ed напрямую (также с /dev/zero). Затем труба берет вывод всех трех файлов и сохраняет в файл размером $SIZE. Это создает один файл с файлом1 в блоке 128 байт, затем файл2 в другом блоке 128 байт, затем файл3, заполняющий остаток паддингом.
Команда cat
con cat объединяет все файлы, указанные в качестве аргументов.
Итак:
cat $DIR/file1 /dev/zero
объединяет file1
с нулями из / dev / zero
до тех пор, пока следующая команда не захочет прочитать. Следующая команда (в конвейере |
): $ DD count = 128
, что означает, что 128 1k блоков
(обратите внимание на bs = 1k в определении переменная) будет прочитана и записана в стандартный вывод.
Вкратце: прочтите file1
и дополните его нулями до 128k.
Следующая командная строка очень похожа:
читать file2
и дополнять его нулями до 128k.
И последняя строка просто читает file3
(без заполнения).
Затем весь этот (в скобках) объединенный поток возвращается в dd
для записи в $ OUT_FILE
до $ SIZE
кбайт.
Вкратце:
read all from file1 and pad with zeros up to 128k.
read all from file2 and pad with zeros up to 128k.
read all from file3.
Затем:
Write all that was read to `$OUT_FILE` up to `$SIZE` kBytes.