2013-10-25 3 views
1

Я написал программу, которая принимает входы от оболочки, а затем выводит результаты. Однако, когда я использую конвейер, вход не отражается.Входы, не отраженные конвейером

$ ./a.out 
$ /home/Wisatbff/file  # input a pathname (echoed) 

использование трубопровода:

$ ./a.out | more 
$       # input (same as above, not echoed) 

Оба вывода правильно. Почему вход не отражается при использовании конвейера?

+0

Может ли быть разница между 'stdout' и' stderr'? Что в вашем коде? –

+0

У вас есть псевдоним для "больше"? Если вы используете псевдоним более = меньше, тогда вы можете захотеть «экспортировать LESS = -X» –

+0

@glennjackman № 'more is/bin/more' –

ответ

1

EDIT (ранее ответ был неправильным, я неправильно понял вопрос):

команда more меняется конфигурация терминала.

Узнайте TTY, где вы запускаете свой ./a.out | more и запустить эту команду из другого TTY (или любой другой therminal):

stty -F /dev/yourTTY echo

И вы будете иметь эхо снова на консоли

Возможно, вы используете псевдотерминал, но команда stty должна работать.

Например:

  1. Узнайте свой текущий терминал: ps ax | grep $$ | awk '{ print $2 }'
  2. Запускайте команды: ./a.out | more
  3. Открыть новый терминал и выполните следующую команду: stty -F /dev/resultFromFirstStep echo
  4. Проверьте, что вы снова эхо на вашем первом терминале.

EDIT:

Кстати, если кому-то интересно, вы можете увидеть, как more меняет терминал чтения в code source:

void set_tty() { 
    otty.c_lflag &= ~(ICANON|ECHO); 
    otty.c_cc[VMIN] = 1; /* read at least 1 char */ 
    otty.c_cc[VTIME] = 0; /* no timeout */ 
    stty(fileno(stderr), &otty); 
} 

Он забирая ECHO и ICANON.

+0

Но почему вход не отражается? –

+0

команда 'more' меняет вашу конфигурацию tty. Вы можете увидеть свою текущую конфигурацию tty с помощью stty comand, например: 'stty -a -F/dev/YOURTTY' или просто' stty -a' для вашего текущего терминала. См. Мое редактирование для получения дополнительной информации о том, как изменить ваш эхо. – Gooseman

+0

Awesome. Я думал, что «больше» ждет ввода, прежде чем он изменит терминал confs. –

Смежные вопросы