节点 child_process execSync 使用 xclip 挂起

node child_process execSync hangs with xclip

我正在尝试使用 child_process 来执行 xclip -selection c,但它似乎挂起或明显延迟执行。

我试过使用 execSync,

require('child_process').execSync('echo hi | xclip -selection c') && console.log('done');

我也试过使用 exec,

require('child_process').exec('echo hi | xclip -selection c', (a) => console.log('done', a)) && undefined;

在这两种情况下,在按下 enter 和打印 done 之间都有明显的延迟。然而,剪贴板实际上几乎立即受到影响,似乎 node 似乎没有意识到命令已完成。

还要注意,执行之间的延迟似乎有所不同。另外,exec 变体似乎比 execSync 变体延迟的时间更短,后者有时似乎无限期挂起。

很抱歉回答我自己的问题,但我在发布问题后不久偶然发现了答案。

显然 xclip,默认情况下,调用时不会终止,但会继续侦听更多输入。指示 xclip 仅期望 1 个输入需要 -l 参数,例如:

require('child_process').execSync('echo hi | xclip -selection c -l') && console.log('done');

来源:https://github.com/astrand/xclip/issues/45