Có thể, trong một tập lệnh shell, ghi vào màn hình trong khi STDOUT và STDERR đang được chuyển hướng?
Tôi có một tập lệnh shell mà tôi muốn chụp STDOUT và STDERR. Kịch bản sẽ chạy trong khoảng một giờ hoặc hơn, vì vậy tôi thỉnh thoảng muốn viết một số thông báo trạng thái lên màn hình sẽ được hiển thị và không được chuyển hướng (không được chụp).
Để có một ví dụ tối thiểu, tôi có một tập lệnh shell, hãy nói "./myscript.sh":
#!/bin/sh -u
echo "Message A: This writes to STDOUT or wherever '1>' redirects to."
echo "Message B: This writes to STDOUT or wherever '1>' redirects to.">&1
echo "Message C: This writes to STDERR or wherever '2>' redirects to.">/dev/stderr
echo "Message D: This writes to STDERR or wherever '2>' redirects to.">&2
echo "Message E: Write this to 'screen' regardless of (overriding) redirection." #>???
Sau đó, ví dụ, tôi muốn xem đầu ra này khi tôi chạy tập lệnh như thế này:
[~]# ./myscript.sh > fileout 2> filerr
Message E: Write this to 'screen' regardless of (overriding) redirection.
[~]# ./myscript.sh > /dev/null 2>&1
Message E: Write this to 'screen' regardless of (overriding) redirection.
[~]#
Nếu điều này không thể được thực hiện "trực tiếp", có thể tạm thời ngừng chuyển hướng, sau đó in một cái gì đó ra màn hình, sau đó khôi phục chuyển hướng như cũ không?
Một số thông tin về máy tính:
[~]# uname -srvmpio
Linux 3.2.45 #4 SMP Wed May 15 19:43:53 CDT 2013 x86_64 x86_64 x86_64 GNU/Linux
[~]# ls -l /bin/sh /dev/stdout /dev/stderr
lrwxrwxrwx 1 root root 4 Jul 18 23:18 /bin/sh -> bash
lrwxrwxrwx 1 root root 15 Jun 29 2013 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Jun 29 2013 /dev/stdout -> /proc/self/fd/1
echo msg > /dev/tty
. Điều đó đã làm việc! Tôi chắc chắn rằng tôi đã thử điều này sớm mà không thành công nhưng tôi phải thử những thứ tương tự khác. Trong mọi trường hợp, nó làm việc cho tôi. Nếu bạn muốn đặt câu hỏi này làm câu trả lời, tôi sẽ đánh dấu nó là chấp nhận.
echo msg > /dev/tty