mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Skip shell functions when parsing env
`getEnvFromShell` function calls `env` command through shell to get all defined environment variable. However `env` also returns the shell function defined with their whole code written on multiple lines. Such shell function definitions were not properly handled by `getEnvFromShell` which led to the following kind of error messages (seen for instance when running a terminal package in Atom): bash: module: line 1: syntax error: unexpected end of file bash: error importing function definition for `BASH_FUNC_module' With this change `getEnvFromShell` now skips shell function definition to guarantee only environment variables are recorded and a sane `result` array is returned. Fixes #20389 Fixes #17369 Fixes #13451 Fixes blueimp/atom-open-terminal-here#27 Fixes blueimp/atom-open-terminal-here#18 Fixes bus-stop/Termination#101 Fixes bus-stop/terminus#24 Fixes platformio/platformio-atom-ide-terminal#120 Fixes platformio/platformio-atom-ide-terminal#293 Fixes AtomLinter/linter-pylint#243 Fixes AtomLinter/linter-flake8#643 Fixes AtomLinter/linter-flake8#165 Fixes AtomLinter/linter-flake8#422 Fixes AtomLinter/linter-puppet-lint#68 Fixes autocomplete-python/autocomplete-python#347
This commit is contained in:
@@ -121,13 +121,22 @@ async function getEnvFromShell(env) {
|
||||
}
|
||||
|
||||
let result = {};
|
||||
let skip = false;
|
||||
for (let line of stdout.split('\n')) {
|
||||
if (line.includes('=')) {
|
||||
// start of shell function definition: skip full definition
|
||||
if (line.includes('=() {')) {
|
||||
skip = true;
|
||||
}
|
||||
if (!skip && line.includes('=')) {
|
||||
let components = line.split('=');
|
||||
let key = components.shift();
|
||||
let value = components.join('=');
|
||||
result[key] = value;
|
||||
}
|
||||
// end of shell function definition
|
||||
if (line === '}') {
|
||||
skip = false;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user