shellshebangenv

Shell script shebang for unknown path


Is it possible to specify a shebang line without knowing the path of the program you want to do the executing?

maybe don't specify the path

#!node

or specify several options

#!/usr/local/bin/node
#!/usr/bin/node

Extra points for cross platform solution (various flavors of linux, BSD, OSX etc...)


Solution

  • /usr/bin/env is specifically thought of for cross-platform solutions.

    env executes utility after modifying the environment as specified on
    the command line.  The option name=value specifies an environmental
    variable, name, with a value of value.  The option `-i' causes env
    to completely ignore the environment it inherits.
    
    If no utility is specified, env prints out the names and values of
    the variables in the environment, with one name=value pair per line.
    

    so something in lines of:

    #!/usr/bin/env node
    

    Will be cross-platform and "the right way to go".