This command works on Windows:

 ReadList["!" <> "echo hello", String]

Assuming the "!" suggests Windows command shell (verified as $SystemShell),

However, I tried the above code in msys.bat which is a Unix-type shell on Windows, and it did not work. How can I do the above operation if it is not a Windows command shell?

Do I need to replace "!" or change $SystemShell somewhere?

I have tried RunProcess (or ReadList) as:

 path = "C:\\MinGW\\msys\\1.0\\msys.bat";   

 RunProcess[path, "StandardOutput", "echo Hello world

This opens msys.bat in a new window, and Mathematica keeps running.

  • $\begingroup$ Perhaps reference.wolfram.com/language/ref/RunProcess.html can be useful. $\endgroup$ – ilian May 14 '15 at 7:45
  • $\begingroup$ @ilian I tried RunProcess[], did nt work, edited question. $\endgroup$ – kamuli May 14 '15 at 16:41
  • $\begingroup$ I know that RunProcess only runs executables, not batch files (which must be interpreted by the windows shell). ReadList may have the same problem. $\endgroup$ – 2012rcampion May 14 '15 at 16:56
  • $\begingroup$ Maybe the process executed could be cmd /c msys.bat or similar? $\endgroup$ – ilian May 14 '15 at 16:59
  • $\begingroup$ I'm not very familiar with MinGW, the parent project of MSYS, but my understanding is that msys.bat is only a wrapper for starting a bash shell, but it's not a command interpreter itself, so you can't really pass it shell commands to it. $\endgroup$ – MarcoB May 14 '15 at 18:42

One approach could be to bypass msys.bat (which I think is primarily concerned with setting up the interactive console) and start the shell executable directly:

In[1]:= shell = "C:\\MinGW\\msys\\1.0\\bin\\bash.exe";
        RunProcess[shell, "StandardOutput", "echo $BASH_VERSION\nexit\n"]

Out[2]= "3.1.23(1)-release"
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.