Jacob Carlborg wrote:
On 7/5/09 6:36 AM, Nick Sabalausky wrote:
"Adam D. Ruppe"<[email protected]> wrote in message
news:[email protected]...
On Sat, Jul 04, 2009 at 04:50:22PM -0400, Nick Sabalausky wrote:
Can /bin/bash safely be expected to exist on all non-Windows systems
that
can compile D? Or is there something better for that? Any common
cross-platform-scripting gotcha's to be aware of?
I know on FreeBSD it is often in /usr/local/bin/bash (if it is installed
at
all), so you can't really rely on it being at /bin/bash.
I don't really have a solution to cover the differences though. I guess
you could write simple, minimal scripts and just use /bin/sh for best
cross platform luck.
That may work just fine in my case. I'm just using a batch-file (win)
and a
shell script (non-win) to launch rebuild to compile the real
cross-platform,
umm "script", that's written in D. And even then, only for the cases
where
the included precompiled versions are insufficient, such as on a
non-x86 or
a mac (my only mac isn't current anymore. and it's completely dead.).
So it
is fairly trivial script.
So sh is typically in that location then? I know Unix doesn't really
have a
way (at least to my knowledge) to handle a script needing a particular
interpreter that could be in different places on different machines
without
requiring the user to make a symlink or something. But I don't really
need
perfect. Good enough is good enough here :)
#!/usr/bin/env bash
but that requires env, I don't know if that's any better.
env is on all Unix platforms I tried, just sometimes it's in /bin/ and
some other times it's in /usr/bin. I know of no portable way to search
the path and run a program from the shebang on Unix. Second, you can't
pass options to a program, for example:
#!/usr/bin/rdmd --chatty -O
won't work because the shell will pass "--chatty -O" as one single
option to rdmd. I worked around that by requiring --shebang if you want
to pass multiple parameters from within the shebang line:
#!/usr/bin/rdmd --shebang --chatty -O
Then rdmd detects that the argument "--shebang --chatty -O" starts with
--shebang and therefore splits the rest and parses them as flags.
Very annoying.
By the way, I recently changed rdmd to... but let me make a different post.
Andrei