Как известно, cmd.exe поддерживает перенаправление (pipe) вывода программ:
$ echo hello | grep hello
hello
Также известно, что если зарегистрировать скрипт через реестр (HKCR\.pl @="perlfile", HKCR\perlfile\shell\open\command @="perl.exe %1"), то можно запускать скрипты прямо в терминале:
Здравствуйте, ntp, Вы писали:
ntp>Всё бы хорошо, но в таких случаях ломается перенаправление вывода:
Интересно, что для bat и cmd файлов перенаправление работает (правда, только в том случае, если сама команда вывода не выводится наружу):
у меня для 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
Здравствуйте, 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]
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, ntp, Вы писали:
ntp>>Кто-то знает рецепт для лечения? V>Ты уверен что находишься в cmd консоли? Префикс $ вроде не промпт cmd.
Да это я просто заменил "D:\>" на префикс для простоты листинга. В виндовом Bash'е-то перенаправление работает корректно.
Здравствуйте, ntp, Вы писали:
ntp>>А так работает. А почему? ntp>Не, тут передаётся "| cat" аргументом к скрипту просто.
Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
ntp>>Не, тут передаётся "| cat" аргументом к скрипту просто. V>Ну можно думаю открыть Process Monitor и посмотреть что куда передаётся
Там только командная строка покажется, а редиректор занимается сам CMD.exe. Если смотреть, то перехват CreateProcess оного..
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Занятно. Писать неудобно, правда. Собственно, все танцы начались из-за быстрого вызова скриптов в консоли. Часто нужно вызвать какой-то служебный скрипт и скопировать вывод в буфер обмена:
script | gclip
, но это не работает. Писать же
perl script | gclip
не получится, т.к. нужно передавать полный путь к скрипту.
Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент.
Здравствуйте, ntp, Вы писали:
ntp>Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент.
По мне так лучше с call приставкой, который ниже по треду привёл
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, ntp, Вы писали:
ntp>>Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент. V>По мне так лучше с call приставкой, который ниже по треду привёл
call писать дольше, чем скобки
Здравствуйте, ntp, Вы писали:
ntp>>>Вариант со скобками, конечно, интересный, но немного неудобно писать. Впрочем, это лучший вариант из предложенных на данный момент. V>>По мне так лучше с call приставкой, который ниже по треду привёл ntp>call писать дольше, чем скобки
да, но надо держать шифт, неудобно
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]