Процесс не работает в Ubuntu, но работает в Windows - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть этот код, который запускает импорт CSV через командную строку для Windows и Linux:

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, поэтому я думаю, что он будет работать от имени пользователя www-data. www-data установлен на nologin, так что это может вызвать проблемы. Не уверен в решении

1 Ответ

0 голосов
/ 18 сентября 2018

Проблема заключалась в том, что одинарные кавычки не работают. Я изменил двойные кавычки, и это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...