Как проверить, вызван ли скрипт из терминала, или вывод скрипта перенаправлен в поток.

Как проверить, вызван ли скрипт из терминала, или вывод скрипта перенаправлен в поток.

Преамбула

А зачем? Это логическое продолжение темы (копия) про покраску текста в терминале. Если использовать ESC-последовательности, то они, что логично, попадут в файл, если пользователь перенаправит туда вывод скрипта, и получится бяка:

Потому, надо проверить, вызвали ли скрипт из терминала, или вывод скрипта перенаправлен в поток.

Решение

По итогам обсуждения с [info]ketmar@ljr и [info]grusha@ljr решение нашлось:

if [ -t 1 ];then
    echo -e "\x1b[32;1mRun in terminal\x1b[0m"
else
    echo "Run in pipe"
fi

Проверка

Вызов из терминала:
./testpipe
Run in terminal

Вызов в потоке:
./testpipe >test.txt

Содержимое файла test.txt:
Run in pipe

Тестовый скрипт

на GitHub

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *