- чем реализовать isatty(stdout) в bash?, phpcoder, 13:29 , 29-Дек-08 (1)
- чем реализовать isatty(stdout) в bash?, devcoder, 13:42 , 29-Дек-08 (2)
>tty(1) ? > tty - print the file name of the terminal connected to standard inputа мне нужно узнать про standard output
- чем реализовать isatty(stdout) в bash?, Andrey Mitrofanov, 13:57 , 29-Дек-08 (4)
>>? > >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 живёт.
- чем реализовать isatty(stdout) в bash?, devcoder, 13:52 , 29-Дек-08 (3)
Вот что придумал, только не уверен что самый красивый и переносимый способ. Идея в том, что 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
- чем реализовать isatty(stdout) в bash?, devcoder, 14:04 , 29-Дек-08 (5)
>Вот что придумал, только не уверен что самый красивый и переносимый способ. или так (покрасивей)
% test -c /dev/stdout && echo 'tty' || echo 'no tty'
Кстати, кроме tty, кто ещё может быть "сharacter special device"?
- чем реализовать isatty(stdout) в bash?, Andrey Mitrofanov, 14:09 , 29-Дек-08 (6)
>Кстати, кроме 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 $ _
- чем реализовать isatty(stdout) в bash?, devcoder, 14:18 , 29-Дек-08 (7)
>>Кстати, кроме 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". Некрасиво, но точно.
- чем реализовать isatty(stdout) в bash?, devcoder, 14:44 , 29-Дек-08 (8)
>остаётся только "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 открыт и является терминальным устройством
- чем реализовать isatty(stdout) в bash?, vic, 01:01 , 30-Дек-08 (9)
> >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 открыт и является терминальным устройством > наверно лучше "открыт и связан с терминалом" (https://www.opennet.ru/man.shtml?topic=bash&category=1&russian=0), т.к. в вашем варианте получается что дескриптор это устройство :)
|