Команда Bash не выполняется через .net core Process

2

Я написал простую команду для создания базового эха в Linux.

Это команда, которую я хочу сделать:

/bin/bash -c 'echo hello'

Это приложение, в котором я запускаю:

using System;
using System.Diagnostics;

namespace ProcessTest
{
    class Program
    {
        static void Main(string[] args)
        {

            var startInfo = new ProcessStartInfo
            {
                FileName = @"/bin/bash",
                Arguments = @"-c 'echo hello'",
                RedirectStandardOutput = true,
                UseShellExecute = false
            };

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

                Console.WriteLine(result);

                Console.Read();
            }
        }
    }
}

Вместо вывода "hello" он выводит это:

hello': -c: line 0: unexpected EOF while looking for matching '''
hello': -c: line 1: syntax error: unexpected end of file

Почему это не работает?

  • 0
    Не знаю, поможет ли это вам, но это работает для меня! (Я вставил ваш код в MonoDevelop и выполнил его в моей системе Ubuntu 18.04 - вы хотели запустить его в Windows?)
  • 0
    Нет, я хочу выполнить это на Ubuntu 18.04. Я использую .net core 2.1. Какую версию .net вы используете?
Показать ещё 5 комментариев
Теги:
.net-core

2 ответа

0
Лучший ответ

Использование двойных кавычек работает. По какой-то причине это вызывает только одинарные кавычки.

  • 0
    пожалуйста отметьте ответ
  • 0
    Какова цель этого комментария? Stackoverflow имеет таймер, когда вы можете самостоятельно пометить как завершенный. Как самозваная полиция, я полагаю, вы уже знаете это?
Показать ещё 1 комментарий
0

Используйте двойную кавычку вместо одиночной кавычки, задавая поле Аргументы.

static void Main(string[] args)
{
    var startInfo = new ProcessStartInfo
    {
        FileName = @"/bin/bash",
        Arguments = @"-c ""echo hello""",
        RedirectStandardOutput = true,
        UseShellExecute = false
    };

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

        Console.WriteLine(result);

        Console.Read();
    }
}
  • 0
    обратите внимание, что «Попробуйте это» не является ответом, пожалуйста, уточните и добавьте описание для вашего ответа

Ещё вопросы

Сообщество Overcoder
Наверх
Меню