Как я могу получить неизмененные параметры командной строки, чтобы “перенести” другой инструмент командной строки?

Я не могу рекомендовать Dmitry Streblechenko библиотека Redemption Data Objects достаточно высоко. Это - COM-компонент, который предоставляет нормальный API Расширенному MAPI и является радостью для использования. Стойки ворот API Exchange перемещаются от одного выпуска до следующего: “Use M: диск! Нет, используйте WebDAV! Нет, используйте ExOLEDB! †¦ нет, используйте веб-сервисы! ” с единственной константой, являющейся старым добрым MAPI.

5
задан Paul Dixon 19 November 2009 в 22:44
поделиться

3 ответа

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

system('bar', @ARGV);

vs.

system("bar @ARGV");

См. perldoc -f system :

Если есть только один скалярный аргумент, аргумент проверяется на наличие метасимволов оболочки, и если они есть, весь аргумент передается в систему командная оболочка для синтаксического анализа (это «/ bin / sh -c» на платформах Unix, но может отличаться на других платформах). Если нет метасимволов оболочки в аргумент, он разбивается на слова и передается непосредственно в «execvp», что более эффективно.

Если вам нужно прочитать вывод программы, используйте дескриптор процесса и передайте аргументы таким же образом (без интерполяции) :

open my $barhandle, '-|', 'bar', @ARGV or die "Can't call bar: $!";
while (my $line = <$barhandle>)
{
    # do something with $line...
}
close $barhandle;

Есть много способов вызвать программу на Perl; см. В чем разница между обратными кавычками Perl, system и exec? для хорошего обзора основных параметров.

12
ответ дан 18 December 2019 в 09:08
поделиться

Это предельно просто. Ознакомьтесь с системным (LIST) вариантом системных вызовов.

system('bar', @ARGV);

perldoc -f system

3
ответ дан 18 December 2019 в 09:08
поделиться

В bash:

exec bar "$@"

Это сохраняет интервал в аргументах. Однако перенаправление ввода / вывода не является аргументом в значении этого термина (но перенаправление ввода / вывода, выполненное для исходного вызова, будет сохраняться для вызванной команды «bar», если вы его не измените).

3
ответ дан 18 December 2019 в 09:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: