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

Вы думаете о ленивой загрузке? Вы можете использовать Lazy<Task> (который инициализирует задачу, но не ставит ее в очередь на выполнение).

var tasks = new Dictionary<Guid, Lazy<Task>>();

tasks.Add(Task1Guid, new Lazy<Task>(() => { whatever the 1st task is }));
tasks.Add(Task2Guid, new Lazy<Task>(() => { whatever the 2nd task is }));


void async RunTaskAsync(Guid guid)
{
   await tasks[guid].Value;
}
6
задан dreftymac 6 April 2009 в 02:44
поделиться

6 ответов

Плохо:

`perl foo.pl`
$(perl foo.pl)

Почему это плохо? Из-за такого количества причин; прежде всего:

  • Wordsplitting: Что Вы делаете, здесь берет вывод сценария жемчуга, разделяя его на блоки везде, где существуют пробелы, вкладки или новые строки, и берущий те блоки в качестве аргументов первому блоку, который является командой для выполнения. В действительно чрезвычайно упрощенных случаях как $(echo 'date +%s') это могло бы работать; но это - просто действительно плохое представление того, что Вы ДЕЙСТВИТЕЛЬНО делаете здесь.
  • Вы не можете сделать заключения в кавычки или использовать любого другого bash функции оболочки как расширение параметра, колотите ключевые слова и т.д.

Хороший, но неудобный:

perl foo.pl > mytmpfile; bash mytmpfile

При создании временного файла для помещения вывода сценария жемчуга в и затем выполнении этого с работами удара но это неудобно, поскольку необходимо создать (и вымыться!) Ваш временный файл и имеют его в портативно перезаписываемый (и безопасный!) местоположение.

Также не забудьте не использовать . или source выполнить временный файл, если Вы действительно не намереваетесь выполнить все это в активной оболочке. Кроме того, когда Вы используете . или source, Вы не сможете надежно очистить свой временный файл позже.

Вероятно, лучшее решение:

perl foo.pl | bash

Это довольно безопасно всесторонний ("безопасный" в контексте, наименее склонный к ошибке) принятие Ваших выводов сценария жемчуга корректный синтаксис удара, конечно.

Альтернативы, которые делают в значительной степени то же самое:

bash < <(perl foo.pl)
bash <(perl foo.pl)
4
ответ дан 8 December 2019 в 14:47
поделиться
`foobar.pl`
5
ответ дан 8 December 2019 в 14:47
поделиться

Учитывая файл жемчуга:

print "date";

следующая команда удара сделает это.

> $(perl qq.pl)
Mon Apr  6 11:02:07 WAST 2009

Но это выполняется в отдельной оболочке. Если Вы действительно хотите вызвать его в контексте текущей оболочки, сделайте это:

$ perl qq.pl >/tmp/qq.$$ ; . /tmp/qq.$$ ; rm -f /tmp/qq.$$
Mon Apr  6 11:04:59 WAST 2009
4
ответ дан 8 December 2019 в 14:47
поделиться

Попытка:

foobar.pl | bash
3
ответ дан 8 December 2019 в 14:47
поделиться

Я не думаю, что это точно, что Вы ищете, но, что я имею :-)

perl foo.pl > /tmp/$$.script; bash /tmp/$$.script; rm /tmp/$$.script

Удачи!

0
ответ дан 8 December 2019 в 14:47
поделиться

Попробуйте открыть ($ fh, "- |", $ arg1, $ arg2)

0
ответ дан 8 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

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