вторник, 5 июля 2011 г.

Перенаправление командной строки выполняется интерпретатором командной строки

Это перевод Command line redirection is performed by the command line interpreter. Автор: Реймонд Чен.

Волшебные символы вроде <, > и | в командных строках вроде
myprogram.exe | sort > output.txt
интерпретируются командным интерпретатором CMD.EXE; они не встроены в функцию CreateProcess. Это довольно очевидно, если вы подумаете об этом.

Командная строка из примера выше создаёт два процесса; чей описатель должна будет вернуть CreateProcess?

Если вы передадите подобную командную строку в CreateProcess, то она просто запустит программу myprogram.exe с аргументами командной строки "| sort > output.txt" (функция ShellExecute/Ex ведёт себя аналогично). Если вы хотите, чтобы эти символы были бы проинтерпретированы как операторы перенаправления ввода-вывода, то вам нужно скормить их тому, кто их понимает в той манере, что вам нужно:
cmd.exe /C myprogram.exe | sort > output.txt
Поскольку различные командные интерпретаторы используют различный синтаксис, вам нужно явно указывать командный интерпретатор, который вы хотите использовать.

Если командная строка пришла от пользователя, то вы, вероятно, захотите использовать переменную COMSPEC, чтобы выполнить команду пользователя в его любимом командном интерпретаторе.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.