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