处理不在Ubuntu上工作但在Windows上工作

问题描述 投票:3回答:1

我有这个代码通过Windows和Linux的命令行运行csv导入:

var isLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
ProcessStartInfo startInfo = null;

if (isLinux)
{
    startInfo = new ProcessStartInfo
    {
        FileName = @"/bin/bash",
        Arguments = $"-c 'cat \"{filePath}\" | psql -h 127.0.0.1 -U {user} -d {dbname} -w -c \"copy data_temp from stdin csv header\"'  ",
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true,
    };

}
else
{
    startInfo = new ProcessStartInfo
    {
        FileName = @"cmd.exe",
        Arguments = $"/c cat \"{filePath}\" | psql -h 127.0.0.1 -U {user} -d {dbname} -w -c \"copy data_temp from stdin csv header\"  ",
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true,
    };
}

using (var process = new Process { StartInfo =  startInfo})
{
    process.Start();
    string result = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
}

它在Windows上工作正常,但在Linux(Ubuntu 18.04)上,result始终为空,导入不起作用。

我曾尝试在终端中自己编写查询:

 /bin/bash -c 'cat "/path/file.csv" | psql -h 127.0.0.1 -U user -d user -w -c "copy data_temp from stdin csv header"'

它工作正常,但从我的代码运行它只返回空字符串,不导入。

我在这做错了什么?

编辑:我发现它可能是一个权限问题。这段代码在我的asp.net核心Web应用程序中,所以它将以用户www-data运行我认为。 www-data设置为nologin因此可能导致问题。不确定解决方案

c# asp.net-core .net-core
1个回答
2
投票

问题是单引号不起作用。我改为双引号并且有效。

© www.soinside.com 2019 - 2024. All rights reserved.