gpt4 book ai didi

node.js - 如何在 Node 中的 child.process.exec 中使用的命令中转义 URL 中的字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:22 24 4
gpt4 key购买 nike

我有一个可用于执行 Rscript 的工作命令,如下所示:

Rscript 02_Meta_Analyses.R --api_es 
http://localhost:8071/api/v1/studies/analysisData\?study\=00000000-
0000-4000-0000-000000000000\&study\=00000000-0000-4000-0000-
000000000001\&study\=00000000-0000-4200-0000-000000000000 --uuid
STUDY_ID --author AUTHOR --year YEAR --type_1 GROUP1 --type_2
GROUP2 --pedro PEDRO --api_select
http://localhost:8071/api/v1/analysis/meta-
analysis/5ad8505491951a966b6984fb --uuid_select STUDY_ID --
outbroad_select OUT_BROAD_SELECT

当我将它直接输入到我的 shell 中时,这个脚本可以正常工作

但是,由于参数中的 uuid 是动态生成的。我创建命令字符串并在 child_procee.exec(command) 中使用它,如下所示:

// create the command.
const command = 'Rscript 02_Meta_Analyses.R --api_es
http://localhost:8071/api/v1/studies/analysisData?study\=00000000-
0000-4000-0000-000000000000&study=00000000-0000-4000-0000-
000000000001&study=00000000-0000-4200-0000-000000000000 --uuid
STUDY_ID --author AUTHOR --year YEAR --type_1 GROUP1 --type_2
GROUP2 --pedro PEDRO --api_select
http://localhost:8071/api/v1/analysis/meta-
analysis/5ad8505491951a966b6984fb --uuid_select STUDY_ID --
outbroad_select OUT_BROAD_SELECT'

// execute the command.
const { exec } = require('child_process');
exec(command, options, (error, stdout, stderr) => {
if (error) {
pino.info(`Metadata analysis exec error: ${error}`);
sendFailureEmail(user.email, done);
} else {
........
}

我尽力了:

例如 1

const command = 'Rscript 02_Meta_Analyses.R --api_es 
http://localhost:8071/api/v1/studies/analysisData\\?study\\=00000000-
0000-4000-0000-000000000000\\&study\\=00000000-0000-4000-0000-
000000000001\\&study\\=00000000-0000-4200-0000-000000000000 --uuid
STUDY_ID --author AUTHOR --year YEAR --type_1 GROUP1 --type_2
GROUP2 --pedro PEDRO --api_select
http://localhost:8071/api/v1/analysis/meta-
analysis/5ad8505491951a966b6984fb --uuid_select STUDY_ID --
outbroad_select OUT_BROAD_SELECT

例如 2:

const command = 'Rscript 02_Meta_Analyses.R --api_es 
"http://localhost:8071/api/v1/studies/analysisData\\?
study\\=00000000-
0000-4000-0000-000000000000\\&study\\=00000000-0000-4000-0000-
000000000001\\&study\\=00000000-0000-4200-0000-000000000000" --uuid
STUDY_ID --author AUTHOR --year YEAR --type_1 GROUP1 --type_2
GROUP2 --pedro PEDRO --api_select
http://localhost:8071/api/v1/analysis/meta-
analysis/5ad8505491951a966b6984fb --uuid_select STUDY_ID --
outbroad_select OUT_BROAD_SELECT'

但我似乎无法获得可用于执行 R 脚本的有效命令。希望我澄清了我的问题,如果有任何关于此的提示,我将不胜感激。

最佳答案

有时候,最好的获胜方式就是根本不打架。这与 shell 引用加倍。

如果将该命令写入脚本,您可以exec 该脚本,仅使用 UUID 作为参数,避免转义所有内容。根据您的示例,这样的脚本如下所示:

#!/bin/sh
Rscript 02_Meta_Analyses.R --api_es "http://localhost:8071/api/v1/studies/analysisData?study=$1&study=$2&study=$3" \
--uuid STUDY_ID --author AUTHOR --year YEAR --type_1 GROUP1 --type_2 GROUP2 \
--pedro PEDRO --api_select "http://localhost:8071/api/v1/analysis/meta-analysis/$4" --uuid_select STUDY_ID --outbroad_select OUT_BROAD_SELECT

如果将该文件保存为 magic-R-script,那么您可以像这样构建命令:

const command = 'sh magic-R-script <UUID1> <UUID2> <UUID3> <UUID4>'

然后所有引用都由 shell 处理,让您多一天避免遇到问题。

关于node.js - 如何在 Node 中的 child.process.exec 中使用的命令中转义 URL 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com