2013-09-13 2 views
1

Что такое Unix echo foo | cat?stdin → stdout?

ECHO foo | TYPE CON висит, ожидая ввода, по крайней мере, на Windows XP/SP3. Возможно, CON - это не stdin, а ввод с клавиатуры.

Вы можете задаться вопросом, в чем смысл этого упражнения: Существуют программы, которые ведут себя по-разному, когда они замечают, что их вывод передан по каналам, и я хочу, чтобы их проверить.

+0

Что вы пытаетесь достичь? 'echo' - это не то же самое, что ** stdin **, и по определению уже направлено на ** stdout **, поэтому в этом случае канал' cat' является избыточным. – Dan

+0

@Dan Просто обновил вопрос с информацией о * why *. – feklee

+0

Можете ли вы привести пример? – foxidrive

ответ

3

Неуверенный, что вы хотите сделать, но это может помочь:

type file|more 

И это может быть более подходящим для ваших нужд.

foo.exe | findstr "^" 
+1

'echo foo | more' будет самым близким псевдонимом, но я все еще не уверен, какова его цель. – Dan

+0

«БОЛЬШЕ» ОК для меня. Однако это не идеально, поскольку это страницы, которые мне не нужны и не нужны. Поэтому я оставлю этот вопрос открытым, надеясь на лучшее решение. – feklee

+0

Мне очень нравится решение findstr! – Dan

1

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

Я считаю, что foo.exe | more будет служить вашей цели в Windows.

Примечание: more имеет побочный эффект подкачки вывода, поэтому, если вам нужно протестировать более длинные выходы, вы можете написать простое приложение, которое выполняет перенаправление.

Редактировать: вы можете написать простой командный файл, чтобы перенаправить stdin на stdout и передать его. От ответа Джеба here:

@echo off 
setlocal DisableDelayedExpansion 

for /F "tokens=*" %%a in ('findstr /n $') do (
    set "line=%%a" 
    setlocal EnableDelayedExpansion 
    set "line=!line:*:=!" 
    echo(!line! 
    endlocal 
) 

Сохранить это как redir.bat и использовать как так foo.exe | redir.bat. Протестировано на Win7. Совместимость с установкой Windows по умолчанию. Единственный недостаток - это нелегко запомнить один лайнер.

Я использовал бы more для простых случаев и возвращался к этому для более длинных выходов.

+0

'foo.exe | tee' предоставит неэкранированный результат - если он выберет подходящий фильтр сторонней тройки – foxidrive

+0

Действительно, я установил 'tee', из [GnuWin] (http://gnuwin32.sourceforge.net/). Я надеялся на что-то, включенное в Windows. Программы, которые я тестирую (на основе Node.js), определяют '>' и '|' как разные. – feklee

+0

'foo.exe | repl" (. *) "" $ 1 "' может работать, где repl - это вспомогательный пакетный файл с именем repl.bat - http://www.dostips.com/forum/viewtopic.php?f = 3 & t = 3855 – foxidrive