Эту проблему невозможно решить в общем случае; что произойдет, если у кого-то будет установлена другая программа с именем tail
или псевдоним или функция оболочки, которая изменяет свое поведение? Здесь вы обнаруживаете, что создание переносимых / надежных сценариев оболочки (особенно между очень разными операционными системами) может быть довольно сложным. Вы должны решить для себя, как принять все эти решения и где вы хотите провести черту.
Быстрый и грязный способ - просто позвонить tail -r
с некоторым известным вводом и посмотреть, соответствует ли вывод тому, что вы ожидаете. Используйте это, чтобы принять решение о том, что делать дальше в вашем скрипте. Пример (вероятно, не пуленепробиваемый):
#!/bin/bash
INPUT=$(mktemp)
OUTPUT=$(mktemp)
COMPARE=$(mktemp)
cat >${INPUT} <<EOF
1
2
3
EOF
cat >${COMPARE} <<EOF
3
2
1
EOF
tail -r ${INPUT} >${OUTPUT} 2>&1
cmp -s ${OUTPUT} ${COMPARE}
if [ $? == 0 ]
then
echo "'tail -r' behaves as expected"
else
echo "'tail -r' does not behave as expected"
fi
rm ${INPUT} ${OUTPUT} ${COMPARE}
Он выводит, как и ожидалось, на машине Ma c и Linux, которую я только что протестировал.