noboy wrote:
There was a soft link /bin/sh -> dash
I have change this to bash, and now all went fine.

Thank you

Steven Schveighoffer Wrote:

On Thu, 18 Mar 2010 09:28:06 -0400, noboy <nob...@nowhere.com> wrote:

I was little bit surprise because
mkdir -p dmd-2/usr/{bin,lib,src/phobos2,share/man
do the right thing.
When you do that, you are using your shell. The shell actually does the argument expansion, not mkdir. So the question to answer is, does system use the shell or just call mkdir directly. According to my man page, using system("cmd") is equivalent to doing /bin/sh -c cmd. On my system doing this:

/bin/sh -c 'mkdir -p /testdir/{a,b,c}'

results in the desired behavior. The single quotes force the shell I'm currently running *not* to expand the arguments, but pass them directly to /bin/sh as one string. I would expect that system would execute the same command.

I would guess on my system that your code would work properly, but I'm not sure. What you need to find out is what /bin/sh actually is on your system. Maybe it is a shell that does not understand how to expand the {a,b,c} term. IIRC, /bin/sh usually is a link to bash, but I think on some systems, bash behaves differently if it's called via /bin/sh.

But if i make
mkdir -p "dmd-2/usr/{bin,lib,src/phobos2,share/man"
it's wrong.

So i have think the system command wrap quotes about the command.
I don't think this is what's happening.

-Steve

then presumably the syntax you are using is a bashism?. You could also say something like:


system("bash mkdir -p " ~ path);


Messing with your sh symlink may have some undesired consequences.

Reply via email to