이 작업을 수행하면 ls /dev/tty*
다음과 같은 출력이 표시됩니다.
/dev/tty /dev/tty12 /dev/tty17 /dev/tty21 /dev/tty26 /dev/tty30 /dev/tty35 /dev/tty4 /dev/tty44 /dev/tty49 /dev/tty53 /dev/tty58 /dev/tty62 /dev/ttyS0
/dev/tty0 /dev/tty13 /dev/tty18 /dev/tty22 /dev/tty27 /dev/tty31 /dev/tty36 /dev/tty40 /dev/tty45 /dev/tty5 /dev/tty54 /dev/tty59 /dev/tty63 /dev/ttyS1
/dev/tty1 /dev/tty14 /dev/tty19 /dev/tty23 /dev/tty28 /dev/tty32 /dev/tty37 /dev/tty41 /dev/tty46 /dev/tty50 /dev/tty55 /dev/tty6 /dev/tty7 /dev/ttyS2
/dev/tty10 /dev/tty15 /dev/tty2 /dev/tty24 /dev/tty29 /dev/tty33 /dev/tty38 /dev/tty42 /dev/tty47 /dev/tty51 /dev/tty56 /dev/tty60 /dev/tty8 /dev/ttyS3
/dev/tty11 /dev/tty16 /dev/tty20 /dev/tty25 /dev/tty3 /dev/tty34 /dev/tty39 /dev/tty43 /dev/tty48 /dev/tty52 /dev/tty57 /dev/tty61 /dev/tty9
형식이 양호하며 터미널 내에서 모든 파일을 적당한 크기로 볼 수 있습니다.
하지만 이런 식으로 명령을 실행하면 다음과 같이 watch -d -n1 'ls /dev/tty*'
표시됩니다.
Every 1.0s: ls /dev/tty* debian: Wed Jun 30 21:08:06 2021
/dev/tty
/dev/tty0
/dev/tty1
/dev/tty10
/dev/tty11
/dev/tty12
/dev/tty13
/dev/tty14
/dev/tty15
/dev/tty16
/dev/tty17
/dev/tty18
/dev/tty19
/dev/tty2
/dev/tty20
/dev/tty21
...
따라서 출력이 세로로 나열되어 화면에 맞지 않습니다. 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있나요?
답변1
이유는 무엇입니까?
명령을 실행할 때 watch
터미널에 연결되지 않습니다. 즉, isatty(3)
0이 반환됩니다. 다음 isatty.c를 사용하여 명령이 실행될 때 터미널에 연결되어 있는지 확인할 수 있습니다.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
printf("%d\n", isatty(STDOUT_FILENO));
return EXIT_SUCCESS;
}
엮다:
gcc isatty.c -o isatty
터미널 에뮬레이터에서 실행:
$ ./isatty
1
시계에서 실행:
$ watch ./isatty
Every 2.0s: ./isatty darkstar: Wed Jun 30 20:42:51 2021
0
이 문제를 어떻게 해결할 수 있나요?
watch 와 함께 ls 옵션을 사용하십시오 -C
.
watch -d -n1 'ls -C /dev/tty*'
답변2
ls
위에 제공된 답변은 TTY가 감지될 때와 동일한 작업을 수행하는 옵션을 제공하므로 좋습니다 . 그러나 다른 명령에서 이 작업을 수행하려는 경우(해당 옵션은 없음) 간단한 방법은 다음과 같습니다.
$ watch 'unbuffer ls /dev/tty*'
unbuffer
[1] 기본적으로 tty를 생성하고 이를 사용하여 그렇지 않으면 진행되는 버퍼링을 중지합니다. 부작용은 실행되는 프로그램(이 경우 ls
)이 TTY를 확인하므로 터미널에 표시되는 것과 정확히 동일한 작업을 수행한다는 것입니다.