shell 命令到 child_process.spawn(command, [args], [options]) node.js

2024-02-10

基本上,我只想在节点应用程序上运行 rsync 命令。

原始 rsync 代码如下:

rsync -r -t -p -o -g -v --progress --delete -l -H /Users/ken/Library/Application Support/Sublime Text 3/Packages /Users/ken/Google Drive/__config-GD/ST3

首先,我尝试过

child_process.exec(command, [options], callback)

但是,由于 rsync 输出很长,因此超出了缓冲区。

所以,我尝试了

child_process.spawn(command, [args], [options])

相反,stream.pipe 输出。

var spawn = require('child_process')
        .spawn;
var ps = spawn(command1, args1)
        .stdout
        .pipe(process.stdout);

尽管这按预期工作,但将每个原始 rsync 命令拆分为生成格式太难了。 (我从 gRsync 工具复制并粘贴命令)

有聪明的方法可以做到这一点吗?

Thanks.


好的,这是技巧;

在终端 shell 和 javascript/node 中转义 MacDirectory 的空白非常棘手,所以我放置_@_代替\('\'+空格)。

(function()
{
    'use strict';
    //,,,,,,,,,,,,,,

    var parseShCmd = function(cmd)
    {
        var cmdA = cmd.split(/ /);
        console.log(cmdA);
        var cmd1 = cmdA[0];
        var args1 = [];
        cmdA.map(function(s, i)
        {
            if (i === 0)
            {
                console.log('-------------------'); //do nothing
            }
            else
            {
                args1[i - 1] = cmdA[i].replace(/_@_/g, ' ');
            }
        });
        return [cmd1, args1];
    };

    var shCmd = 'rsync' +
        ' -r -t -p -o -g -v --progress --delete -l -H ' +
        '/Users/ken/Library/Application_@_Support/Sublime_@_Text_@_3/Packages ' +
        '/Users/ken/Google_@_Drive/__config-GD/ST3';
    //var shCmd = 'ls -la';
    var cmd1 = parseShCmd(shCmd);
    console.log(cmd1[0]);
    console.log(cmd1[1]);
    console.log('==================');
    var spawn = require('child_process')
        .spawn;
    var ps = spawn(cmd1[0], cmd1[1])
        .stdout
        .pipe(process.stdout);

    //,,,,,,,,,,,,,,,,
}());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell 命令到 child_process.spawn(command, [args], [options]) node.js 的相关文章

随机推荐