Skip to content

Commit

Permalink
Skip shell functions when parsing env
Browse files Browse the repository at this point in the history
`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 atom#20389
Fixes atom#17369
Fixes atom#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
  • Loading branch information
xdelaruelle committed Feb 8, 2020
1 parent 228959e commit 1cc2f2d
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/update-process-env.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 1cc2f2d

Please sign in to comment.