Câu trả lời:
Bạn có thể gọi exec
lại để khôi phục lại các mô tả ban đầu. Bạn sẽ cần phải lưu chúng ở đâu đó.
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
Trong phần ghi nhật ký, bạn có thể sử dụng các bộ mô tả gốc cho một lệnh bằng cách chuyển hướng đến các bộ mô tả bổ sung.
echo "30 seconds remaining" >&3
Ngoài ra, bạn có thể đặt phần đã ghi của tập lệnh vào một lệnh ghép và chuyển hướng lệnh ghép đó. Điều này không hoạt động nếu bạn muốn sử dụng các mô tả ban đầu trong một cái bẫy ở đâu đó trong phần được chuyển hướng đó.
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
Sử dụng additinal fd 3 và 4 cho stdout và stderr và chỉ cần chuyển hướng 1 và 2 cho chúng ở cuối tập lệnh của bạn:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
exec 3>/dev/stdout 4>/dev/stderr -bash: /dev/stdout: Permission denied
Trước tiên, bạn nên kiểm tra xem bạn có tty hay không.
if tty -s; then
echo "Hello, World" > $(tty)
fi
tty
tiện ích bên ngoài . Bạn có thể chuyển hướng đến thiết bị đặc biệt /dev/tty
.
>&3
làm cho giải pháp ưa thích của tôi. Cảm ơn (một lần nữa)!