当前位置:首页 > JavaScript

js 实现shell

2026-03-14 21:42:27JavaScript

使用 Node.js 实现 Shell 功能

Node.js 提供了 child_process 模块,可以执行 Shell 命令并与之交互。以下是通过不同方法实现 Shell 功能的方式:

方法 1:使用 exec 执行简单命令

const { exec } = require('child_process');

exec('ls -l', (error, stdout, stderr) => {
  if (error) console.error(`Error: ${error.message}`);
  if (stderr) console.error(`Stderr: ${stderr}`);
  console.log(`Output: ${stdout}`);
});

exec 适用于短时间运行的命令,返回完整的缓冲输出。

方法 2:使用 spawn 处理流式输出

const { spawn } = require('child_process');

const ls = spawn('ls', ['-l']);
ls.stdout.on('data', (data) => console.log(`Output: ${data}`));
ls.stderr.on('data', (data) => console.error(`Error: ${data}`));
ls.on('close', (code) => console.log(`Process exited with code ${code}`));

spawn 适合长时间运行的命令或需要实时处理输出的场景。

方法 3:使用 execSync 同步执行

js 实现shell

const { execSync } = require('child_process');

try {
  const output = execSync('ls -l').toString();
  console.log(`Output: ${output}`);
} catch (error) {
  console.error(`Error: ${error.message}`);
}

同步方法会阻塞事件循环,适合脚本场景。

方法 4:创建交互式 Shell

const { spawn } = require('child_process');
const readline = require('readline');

const shell = spawn('/bin/sh', { stdio: 'inherit' });

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', (input) => {
  shell.stdin.write(`${input}\n`);
});

此方法模拟终端交互,将用户输入直接传递给子进程。

js 实现shell

安全注意事项

  • 避免直接拼接用户输入到命令中,使用参数数组形式(如 spawn 的第二个参数)可防止命令注入。
  • 对敏感命令或长期运行的进程设置超时限制。
  • 检查子进程的退出码和错误输出。

扩展功能

管道支持

const grep = spawn('grep', ['node']);
const ls = spawn('ls', ['-l']);

ls.stdout.pipe(grep.stdin);
grep.stdout.pipe(process.stdout);

通过流式管道实现类似 Unix 管道功能。

环境变量控制

spawn('echo', ['$PATH'], {
  env: { ...process.env, PATH: '/custom/path' },
  shell: true
});

通过 env 选项可自定义子进程的环境变量。

以上方法覆盖了从简单命令执行到复杂交互式 Shell 的实现需求,开发者可根据具体场景选择合适的方式。

标签: jsshell
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…