使用系统进程时找不到命令

时间:2016-06-06 10:46:47

标签: c# bash process

当我使用Terminal / Bash调用Image Magick命令(例如“convert”)时,我的命令成功。如果我使用C#脚本中的系统进程使用相同的命令“convert”将参数传递给Bash控制台,它将返回错误命令,而不是通过StandardRedirectError找到。

为什么在使用系统进程时找不到命令? e.g

    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"

由于

2 个答案:

答案 0 :(得分:1)

请发布更完整的代码示例,您需要告诉Process运行哪些可执行文件并传入参数。 See the MSDN docs and Sample

Soimething like

class RatingForm(forms.Form):
name = forms.CharField(
    label='', 
    widget=forms.TextInput(attrs={'class': 'form-control'}),
    )
rating = forms.ChoiceField(
    label='',
    widget=forms.RadioSelect(attrs={'class': ''}), 
    choices=RATING_CHOICES,
    )

答案 1 :(得分:0)

由@MurrayFoxcroft正确指导,这是由于非登录shell模式意味着我的.bash_profile未加载。这样做:

        process.StandardInput.WriteLine (". ~/.bash_profile");
        process.StandardInput.WriteLine ("convert");