문자열을 현재 TTY로 리디렉션

문자열을 현재 TTY로 리디렉션

몇 가지 코드가 있습니다.

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

관련된:Posix에는 장비가 필요합니까?

관련 정보