shebang under linux does not split arguments shebang under linux does not split arguments bash bash

shebang under linux does not split arguments


On Linux, you can't pass more than one argument via the shebang line. All arguments will be passed as a single string to the executable:

#!/bin/foo -a -b -c

will pass one option "-a -b -c" to /bin/foo, plus the contents of the file. Like if you would call:

/bin/foo '-a -b -c' contents-of-file.txt

The behaviour should be the same on most unix derivates nowadays, but it can differ, I haven't tested them all :)

It's hard to find proper documentation for this, the best I could quickly find was this: https://www.in-ulm.de/~mascheck/various/shebang/#splitting


As a workaround you would normally create a shell wrapper:

#!/bin/bashexec kotlin --arg1 --arg2 ... /path/to/kotlin-script


Check your coreutils version:

apt-cache policy coreutils

Starting with coreutils 8.30 you will be able to use:

#!/usr/bin/env -S command arg1 arg2 ...

You may want to upgrade your coreutils