Что делает да, $ (да да) делают?

По крайней мере, Linux и BSDs имеют TIOCSTI ioctl для продвижения символов назад к терминальному входному буферу (до предела [4 096 символов на Linux]):

#include <sys/ioctl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>

void stackchar(char c)
{
  if (ioctl(0, TIOCSTI, &c) < 0) {
    perror("ioctl");
    exit(1);
  }
}
int main(int argc, char *argv[])
{
  int i, j;
  char c;

  for (i = 1; i < argc; i++) {
    if (i > 1) stackchar(' ');
    for (j=0; (c = argv[i][j]); j++) {
      stackchar(c);
    }
  }
  exit(0);
}

Скомпилируйте его и назовите его как:

cmd foo bar < "$some_tty"

продвигать символы назад на некотором tty.

И в жемчуге:

require "sys/ioctl.ph";
ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV;

Править: Я понимаю теперь, что это - тот же ioctl как в writevt решении. Комментарий и название команды вводят в заблуждение как работы TIOCSTI для любого терминала, не просто VTs.

23
13.04.2017, 15:37
1 ответ

Должно уже быть достаточно работать

 echo $(yes yes)

$(...) выполняет внутреннюю команду, пока она не закончена и получает весь свой вывод. - Теперь как yes выполняет долгое время и генерирует большой вывод, удар в конечном счете исчерпает память и катастрофический отказ.

25
27.01.2020, 19:42

Теги

Похожие вопросы