Execa
使用 execa 模拟bash环境,针对windiw
(async function () {
const { execa } = require('execa')
const { execSync } = require('child_process')
const testCommand = [
"date",
"type -p dir",
"echo $PATH",
"ffprobe C:/Users/admin/Documents/IPTVBuddy/audio.mp3",
"rg bash",
"jq '.name, .version' package.json",
"locale",
"npm config list",
"npm install -g cowsay",
"python --version",
"pip install cowsay",
"python -c \"import cowsay; cowsay.cow('Your message here')\"",
"soffice.com --version",
"which cowsay"
].join(" && ")
const paths = [
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\rg\\ripgrep-15.2.0-x86_64-pc-windows-msvc",
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\jq",
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\node\\global",
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\node\\node-v26.13.0-win-x64",
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\python",
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\python\\Scripts",
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\ffmpeg\\ffmpeg-9.0.2-full_build\\bin",
"C:\\Users\\admin\\Documents\\IPTVBuddy\\tools\\LibreOffice\\program",
].join(";")
const { failed, stderr, stdout, stdio, escapedCommand } = await execa(testCommand, [], {
shell: 'C:/Users/admin/Documents/IPTVBuddy/tools/PortableGit/bin/sh.exe',
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'pipe'],
extendEnv: false,
env: {
HOME: 'C:/Users/admin/Documents/IPTVBuddy/',
TERM: 'xterm-256color',
LANG: 'zh_CN.UTF-8',
LC_ALL: 'zh_CN.UTF-8',
OUTPUT_CHARSET: 'UTF-8',
PATH: paths,
TMP: 'C:/Users/admin/Documents/IPTVBuddy/TEMP',
TEMP: 'C:/Users/admin/Documents/IPTVBuddy/TEMP',
NPM_CONFIG_PREFIX: "C:/Users/admin/Documents/IPTVBuddy/tools/node/global",
NPM_CONFIG_CACHE: "C:/Users/admin/Documents/IPTVBuddy/tools/node/cache",
NPM_CONFIG_REGISTRY: "https://registry.npmmirror.com",
// python embed 需要删除python312._pth , 安装 pip 使用 https://bootstrap.pypa.io/get-pip.py
PYTHONNOUSERSITE: '1',
PYTHONUNBUFFERED: '1',
PIP_INDEX_URL: 'https://pypi.tuna.tsinghua.edu.cn/simple/',
PIP_CACHE_DIR: "C:/Users/admin/Documents/IPTVBuddy/tools/python/pip_cache"
},
})
console.log(stderr)
console.log(stdout)
console.log(failed)
console.log(escapedCommand)
})()