如何在bash/shell命令中直接包装导入文件内容(以Node.js为例)
解决方案
Node.js 直接拼接执行(无临时文件)
有两种简洁方式可以不用额外的wrapper文件,直接把前置代码、目标文件内容、后置代码拼接后让Node执行:
方法1:通过 node -e 执行拼接字符串
利用bash命令替换把三段内容合并成一个字符串,传给node -e执行:
node -e "$(echo "console.log('start');"; cat file.js; echo "console.log('end');")"
方法2:通过管道传递合并内容
用bash进程替换(<())生成包含前置/后置代码的临时文件描述符,再和file.js一起通过cat合并,最后管道给Node(Node默认会读取标准输入作为脚本执行):
cat <(echo "console.log('start')") file.js <(echo "console.log('end')") | node
适配npm脚本
把上述命令直接写入package.json的scripts字段,注意转义双引号:
{ "scripts": { "wrapped-run": "cat <(echo \"console.log('start')\") file.js <(echo \"console.log('end')\") | node" } }
执行时直接运行npm run wrapped-run即可。
通用bash方案(适配其他CLI工具)
如果需求扩展到其他必须读取文件而非标准输入的CLI工具,可以用临时文件中转拼接内容,用完自动清理:
# 创建临时文件 tmp_file=$(mktemp) # 确保脚本退出时删除临时文件 trap 'rm -f "$tmp_file"' EXIT # 写入前置代码、目标文件内容、后置代码 echo "console.log('start')" > "$tmp_file" cat file.js >> "$tmp_file" echo "console.log('end')" >> "$tmp_file" # 执行目标命令 node "$tmp_file"
只需把最后一行的node换成你需要的工具,就能适配其他CLI场景。
内容的提问来源于stack exchange,提问作者cyberwombat
相关产品推荐
相关产品推荐

