chuyển hướng đầu ra lệnh bằng cách sử dụng '- << (())


10

Tôi cần phải trích xuất một shasum. Điều này hoạt động, nhưng bất cứ ai có thể giải thích tại sao?

sed 's/^.*= //' -< <(openssl dgst -sha256 filename)

Tôi quen thuộc với $( )cấu trúc, nhưng không thể tìm thấy tài liệu <( ), cùng với -<, mà tôi cho là đang chuyển hướng đến sedSTDIN.

Tôi biết có những cách dễ dàng hơn, nhưng cấu trúc này làm tôi khó hiểu.

Câu trả lời:


10

Các

<(openssl dgst -sha256 filename)

xây dựng là một quá trình thay thế . Nó tạo ra một tập tin (hoặc FIFO) đằng sau hậu trường và chuyển tên của nó trở lại chuỗi lệnh.

< 

là một chuyển hướng tập tin thông thường, chuyển hướng nội dung của tập tin hậu trường đến stdin

-

là một trình giữ chỗ được công nhận bởi sedđể chỉ ra rằng đầu vào của nó đến từ stdin.

sedhoàn toàn có khả năng đọc từ các tập tin, nên -<dường như không cần thiết trong bối cảnh này;

sed 's/^.*= //' <(openssl dgst -sha256 filename)

nên làm việc tốt


3
hoặc chỉopenssl ... | sed '...'
Miles

8

Cấu <( COMMAND )trúc Bash được gọi là quá trình thay thế .

Nó đánh giá COMMANDbên trong và chuyển hướng đầu ra của nó thành một FIFO, một ống có tên có một bộ mô tả tệp ảo bên trong /dev/fdđược gán. Nó hoạt động như một tệp tạm thời chứa đầu ra của lệnh được đánh giá.


Cấu <trúc Bash được gọi là chuyển hướng đầu vào .

Nó nhận một bộ mô tả tệp ở phía bên phải và chuyển hướng nội dung của nó sang STDIN (đầu vào tiêu chuẩn) của lệnh ở phía bên trái.


Đây -không phải là một cấu trúc Bash mà là một đối sốsed chỉ định tệp đầu vào của nó. Giá trị đặc biệt -có nghĩa là đọc từ STDIN (cũng sedlà mặc định, vì vậy nó có thể bị bỏ qua).


sed 's/^.*= //' - < <(openssl dgst -sha256 filename)

Dòng này đầu tiên chạy openssl dgst -sha256 filenamevà lưu trữ đầu ra của nó trong một bộ xếp hình. Bộ mô tả tệp đại diện cho đường ống có tên này được coi là tệp đầu vào được chuyển hướng đến STDIN của sed 's/^.*= //' -. sedLệnh này đọc từ STDIN và xóa mọi ký tự trước ký hiệu "=" theo sau là khoảng trắng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.