Câu hỏi Chuyển hướng lại STDERR trong K / SH?


Khi STDERR được chuyển hướng, ví dụ như một tệp, làm thế nào nó có thể được chuyển hướng trở lại bộ mô tả tệp gốc 2?

#!/bin/sh
exec 2>/tmp/err
print -u2 'log errors to file'
exec 2>&2  (how do we do this???)
print -u2 'log errors to console'

Bối cảnh

Giải pháp chuyển hướng này sẽ hoạt động trong một công việc cron. Ví dụ, nếu cron thực hiện một kịch bản bên ngoài, tập lệnh đó sẽ chuyển hướng stdout và stderr tới các tệp nhật ký và lỗi tương ứng, tương ứng. Tuy nhiên, nếu việc thực thi trong tập lệnh không thành công hoặc một cái gì đó cần phải được báo cáo cho chủ sở hữu công việc, tôi cần xuất thông báo lỗi để cron sẽ nhận được chúng và gửi thư.


1
2017-10-04 05:34


gốc




Các câu trả lời:


Thử:

#!/usr/bin/env ksh
exec 2>ksh_err.txt
print -u2 'log errors to file'
exec 2>`tty`
print -u2 'log errors to console'

Chỉnh sửa 1:

#!/usr/bin/env ksh

exec 8>err.txt
print -u8 'log errors to file'
print -u2 'log errors to console'

Chỉnh sửa 2:

#!/usr/bin/env ksh

exec 3>&2
exec 2>err.txt
print -u2 'log errors to file'
exec 2>&3
print -u2 'log errors to console'

2
2017-10-04 06:49



Điều này sẽ hiệu quả nếu tình hình của tôi khác. Tôi vừa cập nhật câu hỏi của mình. - Clint Pachl
Tôi đã cập nhật câu trả lời của mình. - Casual Coder
Điều đó sẽ làm việc quá, nhưng không phải trong trường hợp của tôi bởi vì tôi không thể kiểm soát mô tả tập tin được ghi vào. Kịch bản được đề cập đang chạy từ cron chứa dump (8). Dump theo mặc định ghi trạng thái / tiến trình đến STDERR và đổ dữ liệu vào STDOUT (đường dẫn đến SSH). Tôi muốn chuyển hướng STDERR của dump vào một dumplog cho toàn bộ kịch bản vì có một số lời gọi kết xuất trong suốt tập lệnh. Tuy nhiên, nếu kịch bản phải báo cáo các lỗi khác, tôi muốn thực hiện chuyển hướng lại về STDERR ban đầu trên bộ mô tả tệp 2. Hy vọng điều đó có ý nghĩa. - Clint Pachl
Đã cập nhật câu trả lời. - Casual Coder
Quá tam ba bận! Bạn nhận được một cookie cho rằng Casual Coder! Tôi đã không nhìn thấy thủ thuật này trong nhiều năm và hoàn toàn quên nó. Đó là nó mặc dù, về cơ bản lưu một con trỏ đến bộ mô tả ban đầu trước khi nó được ghi đè. Mát mẻ. - Clint Pachl