Как функция nodejs exec () загружает среду bash? - PullRequest
0 голосов
/ 04 марта 2019

Недавно я наткнулся на ошибку, когда произошел сбой процесса, запущенного функцией exec(), так как не удалось найти переменную среды.

Я нашел решение здесь на SO, но ятеперь есть вопрос.

В какой среде bash загружается exec() из child_process?(не уверен, что вопрос хорошо написан, поэтому я объясню немного подробнее.)

// app.js
const {exec} = require('child_process');
const http = require('http');

// Create an instance of the http server to handle HTTP requests
let app = http.createServer((req, res) => {
    // Set a response type of plain text for the response
    res.writeHead(200, {'Content-Type': 'text/plain'});

    exec('echo $PATH > foo.txt');   // <<<<<<<<

    // Send back a response and end the connection
    res.end('Hello World!\n');
});

// Start the server on port 3000
app.listen(3000, '127.0.0.1');
console.log('Node server running on port 3000');

Если я запусту приведенный выше код, я получу файл foo.txt с содержимым $PATH внутри,это означает, что среда оболочки, порожденная exec(), может найти переменные среды.

Однако, если я пытаюсь изменить $PATH на $MY_OWN_VARIABLE, он не может найти его, даже если я добавил в .bashrc строку export MY_OWN_VARIABLE="foo bar baz".

(В целях тестирования я работаю на виртуальной машине как root, поэтому я изменил корневой bashrc).

Похоже, что exec() не использует bashrc при порожденииshell, но он по-прежнему находит некоторые переменные, такие как $PATH, но не те, которые я определил, и я не знаю, почему.

Это только чистое любопытство, решение, указанное выше, решило мою проблему, но все еще беспокоит меня.

Примечание: я не знаком с узлом и, вероятно, не знаю, как создается оболочка bash.

1 Ответ

0 голосов
/ 04 марта 2019

Попробуйте перезапустить корневой сеанс и проверить, установлено ли $MY_OWN_VARIABLE с echo $MY_OWN_VARIABLE.Возможно, требуется просто перезапустить сеанс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...