Момент, в принципе, тривиальный и во всех документациях расписанный. Однако, выпишу, чтобы самому не забыть.
Задался я недавно вопросом: как определить, отправляется ли стандартный вывод на консоль, или же перенаправлен другой программе или в файл. Зачем это нужно? Например, может возникнуть желание в консоли его «раскрасить» разными цветами. Тогда как в случае перенаправления красивости будут лишними и, вероятно, даже мешающими.
Изначально такая задача у меня возникла на Ruby. Решение выглядит примерно так (пусть это будет “test_stdout.rb
”):
#!/usr/bin/ruby if $stdout.stat.chardev? puts "Test stdout console: \e[1mYES\e[0m." else puts "Test stdout console: no." end
А вот как эту проверку организовать в bash-скриптах (“test_stdout.sh
”):
#!/bin/bash if [ -c "/dev/stdout" ]; then echo -e "Test stdout console: \e[1mYES\e[0m."; else echo "Test stdout console: no."; fi
Можно сделать эти файлики исполняемыми и посмотреть, что получится при следующих вызовах:
$ ./test_stdout.rb
$ ./test_stdout.rb | cat
$ ./test_stdout.rb > test.txt && cat test.txt
Аналогично и с “test_stdout.sh
”.
Пример практического примения этого на Ruby, не отличающийся по сути от описанного выше, можно увидеть в моем скрипте “rdot
”, выложенном на GitHub — строки 6–10.
Комментариев нет:
Отправить комментарий