Cho một tập tin "foo.txt"
, được tạo ra từ:subshell IO chuyển hướng
$ seq 1 10 > "foo.txt"
Tôi đang cố gắng để đọc cả hai dòng đầu tiên và cuối cùng của tập tin, và tôi bắt đầu bằng cách chuyển hướng các tập tin vào một subshell, do đó danh sách các lệnh sẽ tiêu thụ các tập tin trong chuỗi - mỗi lệnh tiêu thụ đầu vào từ điểm lệnh cuối cùng đã để lại nó, tôi cho rằng:
$ (head -1; tail -1) < "foo.txt"
1
10
Tuy nhiên, nếu tôi cố gắng cùng với một tạm thời mô tả tập tin, kết quả là không giống nhau:
$ (head -1; tail -1) < <(seq 1 10)
1
Câu hỏi:
Tôi không chắc chắn về những gì để đặt tên
<(seq 1 10)
, nhưng sự khác biệt giữa điều này tạm là gì bộ mô tả tệp và thông thường một ("foo.txt"
), điều này khiến cho việc thực thi subshell hoạt động khác nhau?Làm cách nào để đạt được cùng một hành vi chuyển hướng
"foo.txt"
sang vỏ con, nhưng không có tệp tạm thời - mà không thực sự tạo tệp.
+1 để được giải thích rất tốt. Tuy nhiên, OP yêu cầu nếu có thể có hành vi như vậy mà không có bất kỳ tệp tạm thời nào. Là nó? Các thử nghiệm của tôi không thành công. – fedorqui
Bằng cách thay thế dòng chữ 'head' bằng' sh -c ', hãy đọc "$ line"' ', hành vi mong muốn có thể được thực hiện mà không cần tệp tạm thời –
+1 Đó là giải thích chính xác mà tôi đang tìm kiếm!Vì bạn đã nói về việc tạo ra những thứ của riêng mình, tôi đã suy nghĩ về việc viết một kịch bản shell của riêng tôi, với một vài người bạn; chúng tôi đang suy nghĩ về một vỏ chức năng bằng cách nào đó, với mô hình phù hợp và tất cả các trickstery rất thú vị nhất (: – Rubens