[cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 28.09.12 16:44
Оценка:
Как известно, cmd.exe поддерживает перенаправление (pipe) вывода программ:
$ echo hello | grep hello
hello


Также известно, что если зарегистрировать скрипт через реестр (HKCR\.pl @="perlfile", HKCR\perlfile\shell\open\command @="perl.exe %1"), то можно запускать скрипты прямо в терминале:
$ echo print 123; > hello.pl
$ cat hello.pl
print 123;

$ hello.pl
123


Ну и, наконец, можно зарешистрировать расширение файла:
SET PATHEXT=%PATHEXT%;.PL


Тогда можно запускать скрипты вообще не указывая оное:
$ hello.pl
123
$ hello
123


Всё бы хорошо, но в таких случаях ломается перенаправление вывода:
$ echo 123 | cat
123
$ perl -e "print 123" | cat
123
$ hello.pl | cat
$


Кто-то знает рецепт для лечения?
Re: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 28.09.12 16:57
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>Всё бы хорошо, но в таких случаях ломается перенаправление вывода:

Интересно, что для bat и cmd файлов перенаправление работает (правда, только в том случае, если сама команда вывода не выводится наружу):
$ echo echo 123 > echo123.cmd
$ echo @echo 123 > silent.cmd
$ echo123 | cat
$ echo 123
123

$ silent | cat
123
Re: [cmd.exe] перенаправление вывода скриптов
От: sawoy Россия  
Дата: 29.09.12 17:07
Оценка:
Здравствуйте, ntp, Вы писали:

возможно проблема в значении ...\open\command ?

у меня для ruby скриптов используется что-то типа:

"C:\Ruby192\bin\ruby.exe" "%1" %*

и перенаправление работает корректно:

>echo puts "test" > t.rb

>t | more
test
>t.rb | more
test
>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.RB;.RBW



ntp>Кто-то знает рецепт для лечения?
Re: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 29.09.12 18:07
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>Кто-то знает рецепт для лечения?

Ты уверен что находишься в cmd консоли? Префикс $ вроде не промпт cmd.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 29.09.12 18:38
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>Всё бы хорошо, но в таких случаях ломается перенаправление вывода:

ntp>$ hello.pl | cat
А попробуй так:
hello.pl ^| cat
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 29.09.12 20:01
Оценка:
Здравствуйте, sawoy, Вы писали:

S>возможно проблема в значении ...\open\command ?

S>у меня для ruby скриптов используется что-то типа:
S>"C:\Ruby192\bin\ruby.exe" "%1" %*
S>и перенаправление работает корректно:

Очень интересно. А можно выложить содержимое HKCR\.rb и HKCR\Rubyfile или как оно у вас. Потому что у меня не работает ни руби, ни перл так.

win7x64, банер cmd: Microsoft Windows [Version 6.1.7600]
Re[2]: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 29.09.12 20:02
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, ntp, Вы писали:


ntp>>Кто-то знает рецепт для лечения?

V>Ты уверен что находишься в cmd консоли? Префикс $ вроде не промпт cmd.
Да это я просто заменил "D:\>" на префикс для простоты листинга. В виндовом Bash'е-то перенаправление работает корректно.
Re[2]: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 29.09.12 20:07
Оценка:
Здравствуйте, Vain, Вы писали:

V>А попробуй так:

V>
V>hello.pl ^| cat
V>


А так работает. А почему?
Re[3]: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 29.09.12 20:14
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>Здравствуйте, Vain, Вы писали:


V>>А попробуй так:

V>>
V>>hello.pl ^| cat
V>>


ntp>А так работает. А почему?

Не, тут передаётся "| cat" аргументом к скрипту просто.
Re[4]: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 29.09.12 22:52
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>>А так работает. А почему?

ntp>Не, тут передаётся "| cat" аргументом к скрипту просто.
Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 03.10.12 18:25
Оценка:
Здравствуйте, Vain, Вы писали:

ntp>>Не, тут передаётся "| cat" аргументом к скрипту просто.

V>Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
Там только командная строка покажется, а редиректор занимается сам CMD.exe. Если смотреть, то перехват CreateProcess оного..
Re[6]: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 03.10.12 23:06
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>>>Не, тут передаётся "| cat" аргументом к скрипту просто.

V>>Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
ntp>Там только командная строка покажется, а редиректор занимается сам CMD.exe. Если смотреть, то перехват CreateProcess оного..
Вернее так будет, если указать:
@=perl %1 %*

и вызвать так:
test.pl ^| more

то будет:
perl.exe test.pl | more

а иначе — cmd склеивает
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 03.10.12 23:17
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>>>Не, тут передаётся "| cat" аргументом к скрипту просто.

V>>Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
ntp>Там только командная строка покажется, а редиректор занимается сам CMD.exe. Если смотреть, то перехват CreateProcess оного..
Щас глянул поближе, оно оказывается процесс справа от палки закрывает сразу же. Можно проверить поставив в test.pl — sleep.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 03.10.12 23:33
Оценка: 1 (1)
Здравствуйте, ntp, Вы писали:

ntp>>>Не, тут передаётся "| cat" аргументом к скрипту просто.

V>>Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
ntp>Там только командная строка покажется, а редиректор занимается сам CMD.exe. Если смотреть, то перехват CreateProcess оного..
А ещё работает вот так:
(test.pl) | more
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 03.10.12 23:37
Оценка: 1 (1)
Здравствуйте, ntp, Вы писали:

ntp>>>Не, тут передаётся "| cat" аргументом к скрипту просто.

V>>Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
ntp>Там только командная строка покажется, а редиректор занимается сам CMD.exe. Если смотреть, то перехват CreateProcess оного..
А ещё (!), работает вот так:
call test.pl | more
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 04.10.12 10:03
Оценка:
Здравствуйте, Vain, Вы писали:

Занятно. Писать неудобно, правда. Собственно, все танцы начались из-за быстрого вызова скриптов в консоли. Часто нужно вызвать какой-то служебный скрипт и скопировать вывод в буфер обмена:
script | gclip
, но это не работает. Писать же
perl script | gclip
не получится, т.к. нужно передавать полный путь к скрипту.

Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент.
Re[8]: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 04.10.12 20:04
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент.

По мне так лучше с call приставкой, который ниже по треду привёл
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: [cmd.exe] перенаправление вывода скриптов
От: ntp  
Дата: 05.10.12 09:26
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, ntp, Вы писали:


ntp>>Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент.

V>По мне так лучше с call приставкой, который ниже по треду привёл
call писать дольше, чем скобки
Re[10]: [cmd.exe] перенаправление вывода скриптов
От: Vain Россия google.ru
Дата: 05.10.12 09:38
Оценка:
Здравствуйте, ntp, Вы писали:

ntp>>>Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент.

V>>По мне так лучше с call приставкой, который ниже по треду привёл
ntp>call писать дольше, чем скобки
да, но надо держать шифт, неудобно
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.