Tty

將字元串重定向到目前 TTY

  • September 7, 2018

我有一些程式碼:

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)"

但是,它不起作用。

你可以簡單地做(假設 echo 接受 -n 作為“不列印尾隨的新行”):

echo -ne " \r" > "$(tty)"

重定向 ( >) 在引號內不起作用。

一個“單行”範例:

$ echo -n Test; echo -ne " \r " > $(tty); echo "New string"
New string

一個更健壯(便攜)的解決方案是使用 printf:

$ printf Test;     printf ' \r' > "$(tty)"    ; echo "New string"

並且(根據POSIX 的要求)使用 common/dev/tty作為程序 tty 的名稱:

printf ' \r' > /dev/tty

相關:Posix 是否需要任何設備?

你可以改為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"它本身可能不可見,因為它可能會被下一行書寫的內容破壞。)

引用自:https://unix.stackexchange.com/questions/450076