3

why do we use shebang in the beginning of a shell script file. does the script will run without it.

I tried running it without shebang in shell script but it didn't run.

  • the #! helps the interpreter recognize the code; be it sh, bash, tsch, csh, ksh, .. perl, python .... (which at times can look alike for short scripts) [and thus know which interpreter is required to run it] – guiverc May 18 '18 at 10:48

2 Answers2

3

When a file script starts with the shebang directive

#!langpath args

and has execution permissions set, Unix will "replace it" by

exec langpath args path-to-the-script.

This ways, typically:

  • langpath defines the language to be used, ans should be the path of an executable interpreter of the (programming) language (ex: '/usr/bin/python')
  • the language should accept a script file as an argument
  • the language should ignore the #!... directive as a comment
0

Different shells support different features. To give effective advice, ShellCheck needs to know which shell your script is going to run on. You will get a different numbers of warnings about different things depending on your target shell.

ShellCheck normally determines your target shell from the shebang (having e.g. #!/bin/sh as the first line). The shell can also be specified from the CLI with -s, e.g. shellcheck -s sh file.

If you don't specify shebang nor -s, ShellCheck gives this message and proceeds with some default (bash).

Note that this error can not be ignored with a directive. It is not a suggestion to improve your script, but a warning that ShellCheck lacks information it needs to be helpful.

delfiler
  • 237