2015-04-25 2 views
2

Process.run (и все варианты) жалуются на использование '.' и 'source'. Есть ли встроенный способ сделать это с помощью методов запуска или есть конкретный исполняемый файл, который я могу попробовать вызвать, который будет имитировать исходную команду bash?Как вы используете сценарий оболочки с dart.io в текущем процессе?

+0

Я не знаю, дротика, но после прочтения документа кратко, то мне ясно, что 'Process.run' вызывает процесс непосредственно, в контексте не-оболочке. Если вы хотите 'source', вам нужно сделать вызов интерпретатора оболочки, например bash, поэтому вам нужно запустить' bash -c 'blah blah'' или поставить 'source' и другие команды в shebanged, исполняемый скрипт и запустить этот скрипт. – 4ae1e1

+0

Команда 'source' (aka' .') запускает скрипт * в текущей оболочке *. Поскольку дротик не является оболочкой, команда не имеет особого смысла в этом контексте. Что вы на самом деле пытаетесь достичь? –

+0

@ GordonDavisson Он, вероятно, просто хочет экспортировать некоторые env vars. – 4ae1e1

ответ

2

Все эти команды имеют аргумент runInShell. Если это не исправить, используйте shell -c ". xxx"

Если вы Process.run('. somescript.sh, runInShell: true);, а затем Process.run('someexecutable');, вы ничего не получили, потому что когда первый вызов заканчивается, созданная среда умирает вместе с ним. Я предполагаю, что вы хотите

Process.run('. somescript.sh && someexecutable', runInShell: true); 
+0

В документах runInShell по умолчанию ложно, поэтому без установки этого значения true и переменные env, установленные через Process.run(), должны быть добавлены в текущую среду, в которой работает мое приложение, не так ли? – Crunchex

+0

Кроме того, можете ли вы отредактировать свой ответ, чтобы включить вызов Process.run() в качестве примера? – Crunchex

+0

@Crunchex: Нет, нет никакого способа для подпроцесса (который AIUI - это то, что Process.run создает - в любом из его режимов) для установки переменных среды в родительском процессе. –