Trên Linux, có cách nào để tập lệnh shell kiểm tra xem đầu vào tiêu chuẩn của nó có được chuyển hướng từ thiết bị null không (1, 3) * , lý tưởng mà không cần đọc gì?
Hành vi dự kiến sẽ là:
./checkstdinnull
-> no
./checkstdinnull < /dev/null
-> yes
echo -n | ./checkstdinnull
-> no
EDIT
mknod secretunknownname c 1 3
exec 6<secretunknownname
rm secretunknownname
./checkstdinnull <&6
-> yes
Tôi nghi ngờ tôi "chỉ" cần đọc số lượng lớn / phút của thiết bị đầu vào . Nhưng tôi không thể tìm ra cách làm điều đó từ cái vỏ.
* Không cần thiết chỉ
/dev/null
, nhưng bất kỳ thiết bị null nào ngay cả khi được tạo thủ công bằng mknod
.
{ readlink -f /dev/stdin; } <&6
trường hợp bạn đã sử dụng exec và loại bỏ nút là /root/secretunknownname (deleted)
. Vì nó cho thấy rằng tập tin đã bị xóa: Không đủ cho những gì bạn cần?
stat
giải pháp là người duy nhất làm việc.
/dev/null
, nhưng không cần thiết. Bạn có thể "bí danh" với mknod
s được minh họa trong ví dụ của tôi.
/dev/null
, hoặc chỉ là nó không phải là một tty?