我正在尝试从nodejs(在Linux中)执行以下命令
const exec = require('child_process').exec;
exec('cd "/tmp/export/lessons/4/content/RES-52298196-ce0f-4d91-8aa5-53f4f8e4ecb9/ui" && rm -r !("M345")', (err) => console.log(err));
但是我得到以下输出
Error: Command failed: cd "/tmp/export/lessons/4/content/RES-52298196-ce0f-4d91-8aa5-53f4f8e4ecb9/ui" && rm -r !("M345")
/bin/sh: -c: riga 0: errore di sintassi vicino al token non atteso "("
/bin/sh: -c: riga 0: `cd "/tmp/export/lessons/4/content/RES-52298196-ce0f-4d91-8aa5-53f4f8e4ecb9/ui" && rm -r !("M345")'
at ChildProcess.exithandler (child_process.js:303:12)
at ChildProcess.emit (events.js:321:20)
at ChildProcess.EventEmitter.emit (domain.js:485:12)
at maybeClose (internal/child_process.js:1026:16)
at Socket.<anonymous> (internal/child_process.js:441:11)
at Socket.emit (events.js:321:20)
at Socket.EventEmitter.emit (domain.js:485:12)
at Pipe.<anonymous> (net.js:672:12) {
killed: false,
code: 1,
signal: null,
cmd: 'cd "/tmp/export/lessons/4/content/RES-52298196-ce0f-4d91-8aa5-53f4f8e4ecb9/ui" && rm -r !("M345")'
}
但是,如果我尝试直接从终端这样运行相同的shell命令
$ cd "/tmp/export/lessons/4/content/RES-52298196-ce0f-4d91-8aa5-53f4f8e4ecb9/ui" && rm -r !("M345")
它按预期工作正常。我在哪里做错了?
答案 0 :(得分:0)
尝试像child_process.exec
一样将shell选项传递给{ "shell": "/bin/bash" }
答案 1 :(得分:0)
我通过使用find
命令而不是rm
来解决,就像这样:
var ui = "folder_i_want_to_save";
var myPath = "/path/to/base/directory";
var cmd = `find . -type d ! -name . ! -name '${ui}' -exec rm -rv {} +`;
exec(cmd, { cwd: myPath }, (err) => console.log(err));
我还删除了命令的cd
部分,并将其作为cwd
参数传递。
不幸的是,这是一种解决方法,而不是对语法错误的真正解决方案。