The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"чем реализовать isatty(stdout) в bash?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"чем реализовать isatty(stdout) в bash?"  
Сообщение от devcoder (ok) on 29-Дек-08, 12:40 
?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "чем реализовать isatty(stdout) в bash?"  
Сообщение от phpcoder email(??) on 29-Дек-08, 13:29 
>?

tty(1) ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "чем реализовать isatty(stdout) в bash?"  
Сообщение от devcoder (ok) on 29-Дек-08, 13:42 
>tty(1) ?
> tty - print the file name of the terminal connected to standard input

а мне нужно узнать про standard output

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "чем реализовать isatty(stdout) в bash?"  
Сообщение от Andrey Mitrofanov on 29-Дек-08, 13:57 
>>?
>
>tty(1) ?

Не-а. :)
NAME
       tty - print the file name of the terminal connected to standard input

Что-нибудь вроде

stty -F /dev/stdout && echo Yes || echo No

или

stty -F /proc/$$/fd/1 >&/dev/null && echo Yes || echo No

...если правильно угадал, на каком fd у нас stdout живёт.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "чем реализовать isatty(stdout) в bash?"  
Сообщение от devcoder (ok) on 29-Дек-08, 13:52 
Вот что придумал, только не уверен что самый красивый и переносимый способ.
Идея в том, что ioctl("просто файл", TCGETS) вернёт ошибку с ENOTTY.


% stty -F /dev/stdout
speed 38400 baud; line = 0;
-brkint -imaxbel iutf8

% stty -F /etc/host.conf
stty: /etc/host.conf: Inappropriate ioctl for device

% ls -l /dev/stdout
lrwxrwxrwx 1 root root 15 2008-12-29 11:55 /dev/stdout -> /proc/self/fd/1


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "чем реализовать isatty(stdout) в bash?"  
Сообщение от devcoder (ok) on 29-Дек-08, 14:04 
>Вот что придумал, только не уверен что самый красивый и переносимый способ.

или так (покрасивей)


% test -c /dev/stdout && echo 'tty' || echo 'no tty'

Кстати, кроме tty, кто ещё может быть "сharacter special device"?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "чем реализовать isatty(stdout) в bash?"  
Сообщение от Andrey Mitrofanov on 29-Дек-08, 14:09 
>Кстати, кроме tty, кто ещё может быть "сharacter special device"?

Ну... разные другие устройства? :))

$ for d in /dev/*0; do [ -c $d ] && echo $d; done
/dev/0:0:0:0
/dev/1:0:0:0
/dev/1:0:1:0
/dev/2:0:0:0
/dev/lp0
/dev/rtc0
/dev/sg0
/dev/tty0
/dev/tty10
/dev/tty20
/dev/tty30
/dev/tty40
/dev/tty50
/dev/tty60
/dev/ttyS0
/dev/usbdev1.1_ep00
/dev/usbdev2.1_ep00
/dev/usbdev3.1_ep00
/dev/usbdev3.2_ep00
$ _

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "чем реализовать isatty(stdout) в bash?"  
Сообщение от devcoder (ok) on 29-Дек-08, 14:18 
>>Кстати, кроме tty, кто ещё может быть "сharacter special device"?
>
>Ну... разные другие устройства? :))
>
>$ for d in /dev/*0; do [ -c $d ] && echo
>$d; done

...
Да да да, точно, у меня их даже больше :-)
% find /dev -type c

Ну тады,
"test -с /dev/stdout" в качестве проверки tty списываем как непригодный,
остаётся только "stty -F /dev/stdout".
Некрасиво, но точно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "чем реализовать isatty(stdout) в bash?"  
Сообщение от devcoder (ok) on 29-Дек-08, 14:44 
>остаётся только "stty -F /dev/stdout".
>Некрасиво, но точно.

Как всегда "всё уже украдено до нас" :-)


% test -t 1 && echo "stdout is tty" || echo "stdout is't tty"
stdout is tty
% strace test -t 1
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0


test(1)
-t FD  file descriptor FD is opened on a terminal

Не силён в англицком, но кажется неправильно в man-е описано.

Судя по "strace test -t 1" на русском должно в test(1) быть так:


-t FD  файловых дескриптор FD открыт и является терминальным устройством

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "чем реализовать isatty(stdout) в bash?"  
Сообщение от vic (??) on 30-Дек-08, 01:01 
>
 
>test(1)
>-t FD  file descriptor FD is opened on a terminal
>

>
>Не силён в англицком, но кажется неправильно в man-е описано.

у меня в мане чуть иначе:
True if file descriptor fd is open and refers to a terminal

>Судя по "strace test -t 1" на русском должно в test(1) быть
>так:
>

 
>-t FD  файловых дескриптор FD открыт и является терминальным устройством
>

наверно лучше "открыт и связан с терминалом" (http://www.opennet.me/man.shtml?topic=bash&category=1&russian=0), т.к. в вашем варианте получается что дескриптор это устройство :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру