Мне нужно было извлечь шазум. Это работает, но кто-нибудь может объяснить, почему?
sed 's/^.*= //' -< <(openssl dgst -sha256 filename)
Я знаком с $( )
конструкцией, но не могу найти документы для <( )
, в сочетании с -<
которыми, я полагаю, перенаправляет на sed
STDIN.
Я знаю, что есть более простые способы, но эта конструкция ускользает от меня.
openssl ... | sed '...'
Конструкция
<( COMMAND )
Bash называется заменой процесса .Он оценивает
COMMAND
внутреннюю часть и перенаправляет свой вывод в FIFO, именованный канал, который получает назначенный виртуальный дескриптор файла/dev/fd
. Он действует как временный файл, который содержит выходные данные оцененной команды.Конструкция
<
Bash называется перенаправлением ввода .Он берет файловый дескриптор с правой стороны и перенаправляет его содержимое на стандартный ввод команды слева.
Это
-
не конструкция Bash, а аргумент,sed
который определяет его входной файл. Специальное значение-
означает чтение из STDIN (что также являетсяsed
значением по умолчанию, поэтому его можно опустить).Эта строка сначала запускается
openssl dgst -sha256 filename
и кэширует свой вывод в FIFO. Дескриптор файла, представляющий этот именованный канал, обрабатывается как входной файл, который перенаправляется на STDINsed 's/^.*= //' -
. Этаsed
команда читает из STDIN и удаляет каждый символ перед символом «=», за которым следует пробел.источник