Tôi có hai tập lệnh shell, một tập lệnh đóng vai trò là "chương trình" chính và một tập lệnh khác đóng vai trò là "thư viện".Ghi vào thiết bị đầu cuối sau khi chuyển hướng stdout sang một tệp mà không sử dụng stderr?
Ở một số nơi trong "chương trình", tôi sẽ làm một việc như: log "$thing" >> "$logfile"
, trong đó log
là một hàm được xác định trong "thư viện".
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
Câu hỏi của tôi: Có cách nào để chuyển hướng một số của đầu ra từ các chức năng trở lại nhà ga mà không sử dụng stderr
?
# library.sh
log() {
# This gets written to the log
echo "`date --rfc-3339=seconds`: $1"
# How to write this to the terminal *without* using stderr?
echo "Info: Message written to log." >&2
}
Tôi muốn tránh việc sử dụng các stderr
bởi vì trong chương trình thực tế của tôi, có một tùy chọn để chuyển hướng lỗi vào một tập tin, nhưng những thông điệp tôi muốn gửi đến các thiết bị đầu cuối là cung cấp thông tin, không sai sót, và nên luôn hiển thị trên thiết bị đầu cuối.
thú vị ... có thể giúp bạn giải thích những gì đang xảy ra ? Ngoài ra, điểm của ba dòng đầu tiên là gì? Có vẻ như nó chỉ hoạt động tốt với hai người cuối cùng. Và, tôi cho rằng tôi nên đặt dòng thứ tư trong 'program.sh' thay vì thực hiện nó mỗi khi' log' được gọi? –
Ba dòng đầu tiên chỉ chứng minh rằng các mô tả ban đầu hiện nay vô dụng. Đó là một cách dễ dàng cho một chương trình phức tạp hơn. – sarnold
Ba đầu tiên là để cho thấy rằng kịch bản không có bất kỳ cách nào khác để nói chuyện với bên ngoài (ví dụ như đang bận làm những việc khác). Tôi muốn đặt dòng 'exec' trong thư viện.sh, nhưng cho nó một số cao hơn (nói, 8 hoặc hơn) chỉ trong trường hợp. –