2016-06-06 4 views
0

Когда я использую Terminal/Bash для вызова команды Image Magick, такой как «convert», моя команда преуспевает. Если я использую системный процесс из сценария C# для передачи аргументов в консоль Bash с помощью той же команды «convert», она вернется с командой ошибки, не найденной через StandardRedirectError.Команда не найдена при использовании системного процесса

Почему команда не найдена при использовании системного процесса? например

ProcessStartInfo startInfo = new ProcessStartInfo("/bin/bash"); 
    startInfo.WorkingDirectory = installFolder; 
    startInfo.UseShellExecute = false; 
    startInfo.RedirectStandardInput = true; 
    startInfo.RedirectStandardOutput = true; 
    startInfo.RedirectStandardError = true; 


    Process process = new Process(); 
    process.StartInfo = startInfo; 
    process.Start(); 

    if (process != null) { 

     process.StandardInput.WriteLine ("convert"); //error: command not found 
     process.StandardInput.WriteLine ("echo \"hello world\""); //output: "hello world" 

Благодаря

ответ

1

Пожалуйста, пост более полный пример кода, вы должны сказать, что процесс исполняемый файл для запуска и передать в аргументах. See the MSDN docs and Sample.

Soimething как

Process process = new Process(); 
    startInfo.Arguments = "image_[0-9].gif image_[1-9][0-9].gif animation.gif" 
    process.StartInfo = startInfo; 
    process.Start("convert.exe"); 
+0

Это более простой способ, когда вы вызываете приложение или скрипт с аргументами, я уже прошел этот барьер. Я использую метод StandardInput.WriteLine() для передачи аргументов в консоль bash до тех пор, пока процесс не завершится или не завершится. Я все равно обновлю свой код, чтобы сделать его более понятным. ;) – Beloudest

+0

Глядя на ваш обновленный вопрос - конвертируется по нужному пути? Что, если вы полностью его квалифицируете @ "C: \ myfolder \ convert.exe"? –

+0

Линия «конвертировать» - это команда командной строки Image Magick, которая сама по себе представляет справочную информацию. Image Magick настроен как путь к среде, насколько мне известно, из-за того, что я могу вызвать его через терминал или/bin/bash вручную. Именно это вызывает у меня путаницу, так как передача команды с или без полных аргументов заканчивается неудачей, но простое эхо преуспевает. Я попытаюсь найти точный путь в моей системе и посмотреть, поможет ли это. Он может быть установлен во многих местах на системах, и использование абсолютного пути не идеально подходит для инструмента, который я создаю. Thx, ввод оценивается. – Beloudest

0

Как любезно направленный в правильном направлении по @MurrayFoxcroft это происходит из-за отсутствия режима Логин оболочки, означающего мой .bash_profile не был загружен. Сделайте это так:

 process.StandardInput.WriteLine (". ~/.bash_profile"); 
     process.StandardInput.WriteLine ("convert"); 
Смежные вопросы