Simon Marlow wrote:

GHC 6.6 will allow this, because we added the -x flag (works just like gcc's -x flag). eg. "ghc -x hs foo.wibble" will interpret foo.wibble as a .hs file. I have an uncommitted patch for runghc that uses -x, I need to test & commit it.

Ah, that will be very useful, thanks!

You may already know this, but there is an oddity with shellscripts that can make it difficult to pass flags like -x in a useful way. It's easiest to show this by an example. First create a shellscript called bar, containing one line:

#!./foo -x -y

Now create foo from foo.c:

#include <stdio.h>

extern int
main (int argc, char *argv[])
{
  int i;

  for (i = 0; i < argc; i++)
    printf ("argv[%d] = %s\n", i, argv[i]);
}

Now run bar:

$ ./bar -a -b
argv[0] = ./foo
argv[1] = -x -y
argv[2] = ./bar
argv[3] = -a
argv[4] = -b

Notice how -x and -y have ended up in the same element of argv even though they were meant to be separate arguments. -a and -b were fine because that line was processed by the shell, which saw the space between them and split them up. -x and -y were not processed by the shell, and the kernel is unintelligent about command lines. Everything after the command name ends up in a single argument.

Of course this isn't a disaster, it just means that programs which accept arguments in the #! line have to be careful how they parse them.

Pete

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to