exec.command for patch命令

时间:2017-12-02 18:00:15

标签: go patch goland

我正在尝试使用以下命令修补文件

var IS_DEV = false;

var webpack = require('webpack');
var path = require("path");

// Define plugins needed for production and dev cases
var _pluginsDev = [
    new webpack.ProvidePlugin({
        'fetch': 'imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch',
        moment: 'moment',
        ps: 'perfect-scrollbar'
    }),

];
var _pluginsProd = [
    new webpack.ProvidePlugin({
        'fetch': 'imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch',
        moment: 'moment',
        ps: 'perfect-scrollbar'
    }),
    new webpack.DefinePlugin({
        'process.env': {
            'NODE_ENV': JSON.stringify('production')
        }
    }),
    new webpack.optimize.UglifyJsPlugin({
        minimize: true,
        compress: true,
        output: { comments: false }
    })
];

var _devtool = IS_DEV ? 'eval' : 'cheap-module-source-map';
var _plugins = IS_DEV ? _pluginsDev : _pluginsProd;
var _fileName = IS_DEV ? "./build/[name]-bundle.js" : "./dist/[name]-bundle.js";

var _bundles = {
    login: './components/login/login.jsx',
    home: './components/home/home.jsx'
};

module.exports = {
    entry: _bundles,
    output: {
        path: path.resolve(__dirname, "wwwroot"),
        publicPath: "/",
        filename: _fileName
    },
    devtool: _devtool,
    plugins: _plugins,
    module: {
        rules: [
            {
                test: /\.jsx?$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ['es2015', 'stage-2', 'stage-0', 'react']
                    }
                }
            }
        ]
    },
    resolve: {
        extensions: ['.js', '.jsx']
    }
}

我的runCommand语法如下:

patch -p0 < <file_path>

现在我正在传递我的补丁命令,如下所示:

func runCommand(cmd string, args ...string) error {
    ecmd := exec.Command(cmd, args...)
    ecmd.Stdout = os.Stdout
    ecmd.Stderr = os.Stderr
    ecmd.Stdin = os.Stdin
    err := ecmd.Run()
    return err
}

但我看到以下错误:

补丁:****无法找到文件&#39;&lt;&#39; :没有这样的文件或目录

你能告诉我这里缺少的东西吗?

1 个答案:

答案 0 :(得分:3)

您在documentation

中错过了此段落
  

与&#34;系统&#34;不同。来自C和其他语言的图书馆电话   os / exec包故意不调用系统shell和   不扩展任何glob模式或处理其他扩展,   管道,或通常由shell完成的重定向。包裹   表现得更像C&#34; exec&#34;一系列功能。扩展glob   模式,要么直接调用shell,要么小心逃避任何   危险输入,或使用路径/文件路径包的Glob功能。至   扩展环境变量,使用包os的ExpandEnv。

shell负责处理<操作。您可以使用该文件作为输入自己设置stdin,也可以使用shell。要使用shell,请尝试以下方法:

runCommand("/bin/sh", "patch -p0 < /tmp/file")

请注意,这不适用于Windows。阅读文件并自己写stdin是一种更容易移植的解决方案。