몇 가지 코드가 있습니다.
char *tty_name = ttyname(STDIN_FILENO);
char command[255] = "/usr/sbin/writevt -t "; strcpy(stpcpy(command + 21, tty_name), " -T ' \r'"); system(command);
현재 TTY에 "공백"과 "캐리지 리턴"을 씁니다. 이것은 내 사용에 적합합니다. 그러나 이것을 달성하는 더 쉬운 방법이 있는지 궁금합니다. 나는 이것을 시도했습니다 :
echo -e " \r > $(tty)"
그러나 작동하지 않습니다.
답변1
대신 이렇게 작성할 수 있습니다 open(2)
/dev/tty
.
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
int main(void)
{
int ttyfd;
if ((ttyfd = open("/dev/tty", O_WRONLY)) == -1)
err(1, "open /dev/tty failed");
printf("test1\n");
dprintf(ttyfd, " \rxxx");
printf("test2\n");
return 0;
}
( " \r"
다음 줄에 쓰여진 내용에 따라 손상될 수 있으므로 그 자체로는 표시되지 않을 수 있습니다.)
답변2
간단히 다음을 수행할 수 있습니다(echo가 -n을 "후행 새 줄을 인쇄하지 않음"으로 허용한다고 가정).
echo -ne " \r" > "$(tty)"
Redirect( >
)는 따옴표 안에서 작동하지 않습니다.
"한 줄" 예:
$ echo -n Test; echo -ne " \r " > $(tty); echo "New string"
New string
더 강력한(이식 가능한) 솔루션은 printf를 사용하는 것입니다.
$ printf Test; printf ' \r' > "$(tty)" ; echo "New string"
그리고POSIX 요구 사항) /dev/tty
프로세스 tty의 이름으로 common을 사용합니다.
printf ' \r' > /dev/tty