mirror of
https://github.com/atom/atom.git
synced 2026-01-25 23:08:18 -05:00
78 lines
1.5 KiB
JavaScript
78 lines
1.5 KiB
JavaScript
/** @babel */
|
|
|
|
import {spawnSync} from 'child_process'
|
|
|
|
const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([
|
|
'NODE_ENV',
|
|
'NODE_PATH',
|
|
'ATOM_HOME'
|
|
])
|
|
|
|
const OSX_SHELLS = new Set([
|
|
'/sh',
|
|
'/bash',
|
|
'/zsh',
|
|
'/fish'
|
|
])
|
|
|
|
function updateProcessEnv (launchEnv) {
|
|
let envToAssign
|
|
if (launchEnv && launchEnv.PWD) {
|
|
envToAssign = launchEnv
|
|
} else {
|
|
if (process.platform === 'darwin') {
|
|
envToAssign = getEnvFromShell()
|
|
}
|
|
}
|
|
|
|
if (envToAssign) {
|
|
for (let key in process.env) {
|
|
if (!ENVIRONMENT_VARIABLES_TO_PRESERVE.has(key)) {
|
|
delete process.env[key]
|
|
}
|
|
}
|
|
|
|
for (let key in envToAssign) {
|
|
if (!ENVIRONMENT_VARIABLES_TO_PRESERVE.has(key)) {
|
|
process.env[key] = envToAssign[key]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function shouldGetEnvFromShell (shell) {
|
|
if (!shell || shell.trim() === '') {
|
|
return false
|
|
}
|
|
for (let s of OSX_SHELLS) {
|
|
if (shell.endsWith(s)) {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
function getEnvFromShell () {
|
|
let shell = process.env.SHELL
|
|
if (!shouldGetEnvFromShell(shell)) {
|
|
return
|
|
}
|
|
|
|
let {stdout} = spawnSync(shell, ['-ilc', 'command env'], {encoding: 'utf8'})
|
|
if (stdout) {
|
|
let result = {}
|
|
for (let line of stdout.split('\n')) {
|
|
if (line.includes('=')) {
|
|
let components = line.split('=')
|
|
let key = components.shift()
|
|
let value = components.join('=')
|
|
result[key] = value
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
}
|
|
|
|
export default { updateProcessEnv, shouldGetEnvFromShell }
|