Ý nghĩa của '2 >> (lệnh)' Chuyển hướng trong Bash


18

Cách đây một thời gian tôi đã tạo một kịch bản và tôi đã thêm một số ghi nhật ký xung quanh nó, nhưng tôi quên cách chuyển hướng cho việc ghi nhật ký hoạt động :-(

Ý chính của nó là:

#!/bin/bash

LOGFILE=/some/path/mylogfile

(
  # here go my commands which produce some stdout
  # and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )

Khi tôi chạy tập lệnh, nó không in bất cứ thứ gì stdout, mà chỉ in những gì đi đến stderr. Logfile ${LOGFILE}chụp cả stdout và stderr.

Khi tôi chạy tập lệnh và không có đầu ra trên thiết bị đầu cuối của mình, thì tôi biết mọi thứ đều ổn. Nếu có bất kỳ đầu ra nào, tôi biết có gì đó không ổn và tôi có thể kiểm tra logfile để tìm hiểu vấn đề là gì.

Phần chuyển hướng hiện đang đánh đố tôi là cú pháp của: 2> >( some command )

Bất cứ ai có thể giải thích những gì đang xảy ra ở đó?

Câu trả lời:


23

>(...)được gọi là quá trình thay thế . Nó cho phép chương trình "bên ngoài" ghi vào chương trình "bên trong" như thể nó là một tập tin.

Trong trường hợp này, nó sẽ được viết stderrvào tee -a ${LOGFILE} >&2đó LOGFILEvà sau đó cũng viết lại mọi thứ stderr.

Toán tử chuyển hướng có thể đi theo một trong hai hướng để thay thế quá trình, vì vậy bạn có thể viết cho nó, như trong ví dụ này, hoặc sử dụng <(...)để đọc từ nó, một cách tiện dụng, ví dụ, thực hiện một whilevòng lặp mà không chạy nó trong một lớp con chinh no.


5
Hiểu rồi :-) Nếu tôi thực thi echo <(date), nó sẽ cho tôi tên của tệp được thay thế : /dev/fd/63. Nếu tôi thực thi cat <(date), nó sẽ cho tôi ngày, tức là nội dung của tệp được thay thế : Fri Nov 18 14:11:09 NZDT 2016.
NZD

@NZD, có - nhưng đừng tưởng tượng đó là một tệp thông thường - những gì bạn thấy trong đó /devlà tên cho đường ống giữa các quy trình.
Toby Speight

Là kỹ thuật này được sử dụng bởi vì stderr không thể được dẫn (đến tee, trong trường hợp này)?
bli

@bli Vâng, vì thiết bị xuất chuẩn đã được chuyển hướng ở nơi khác nên điều này đối với tôi giống như cách đơn giản nhất để teethiết bị xuất chuẩn và tách biệt với thiết bị xuất chuẩn.
Eric Renouf
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.