EDIT : đã thay đổi -t
thành -t 0
, phát hiện chính xác đầu vào từ thiết bị đầu cuối hoặc tệp.
Tôi nghĩ rằng chìa khóa ở đây là biết liệu đầu vào của bạn đến từ một thiết bị đầu cuối hoặc từ một tập tin. Có một bài kiểm tra cho điều này ( man test
, xem -t
).
Giả sử bạn đang chạy tập lệnh bash:
if [ -t 0 ]; then
echo "Input from terminal"
if [ $# -eq 0 ]; then
echo "No input files specified on command line. Error." >&2
else
echo "Input file given on command line. It is $1"
fi
else
echo "Input coming from stdin"
fi
Bạn có thể xử lý các tình huống khác nhau bằng cách thay thế mã thực tế cho các câu lệnh echo ở trên.
Cập nhật, kịch bản kiểm tra quickie:
#!/bin/bash
[ -t 0 ] && echo "t is true" || echo "t is false"
Đang chạy:
$ test.sh testfile
t is true
$ test.sh < testfile
t is false
$
< myfile
:(