Process.run
(и все варианты) жалуются на использование '.' и 'source'. Есть ли встроенный способ сделать это с помощью методов запуска или есть конкретный исполняемый файл, который я могу попробовать вызвать, который будет имитировать исходную команду bash?Как вы используете сценарий оболочки с dart.io в текущем процессе?
ответ
Все эти команды имеют аргумент runInShell
. Если это не исправить, используйте shell -c ". xxx"
Если вы Process.run('. somescript.sh, runInShell: true);
, а затем Process.run('someexecutable');
, вы ничего не получили, потому что когда первый вызов заканчивается, созданная среда умирает вместе с ним. Я предполагаю, что вы хотите
Process.run('. somescript.sh && someexecutable', runInShell: true);
В документах runInShell по умолчанию ложно, поэтому без установки этого значения true и переменные env, установленные через Process.run(), должны быть добавлены в текущую среду, в которой работает мое приложение, не так ли? – Crunchex
Кроме того, можете ли вы отредактировать свой ответ, чтобы включить вызов Process.run() в качестве примера? – Crunchex
@Crunchex: Нет, нет никакого способа для подпроцесса (который AIUI - это то, что Process.run создает - в любом из его режимов) для установки переменных среды в родительском процессе. –
Я не знаю, дротика, но после прочтения документа кратко, то мне ясно, что 'Process.run' вызывает процесс непосредственно, в контексте не-оболочке. Если вы хотите 'source', вам нужно сделать вызов интерпретатора оболочки, например bash, поэтому вам нужно запустить' bash -c 'blah blah'' или поставить 'source' и другие команды в shebanged, исполняемый скрипт и запустить этот скрипт. – 4ae1e1
Команда 'source' (aka' .') запускает скрипт * в текущей оболочке *. Поскольку дротик не является оболочкой, команда не имеет особого смысла в этом контексте. Что вы на самом деле пытаетесь достичь? –
@ GordonDavisson Он, вероятно, просто хочет экспортировать некоторые env vars. – 4ae1e1