Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What happens if the interpreter specified after #! is not available?

What happens if the interpreter specified after #! is not available?

I know that after the shebang I have to specify the interpreter (best practice is /bin/bash). As a beginner I don't dare to try a lot I am afraid to damage my system.

Could you give me examples of screenshots of the two scenarios:

  • the interpreter exists
  • the interpreter is not available

I just want to understand.

like image 391
Nikie C Avatar asked Dec 18 '21 22:12

Nikie C


People also ask

Are there any Frequently Asked Questions for interpreting services?

The Translating and Interpreting Service (TIS National) has produced some Frequently Asked Questions designed to answer some common questions for current and potential interpreters. If you cannot find what you are looking for on our website, please contact us and a TIS National staff member will help with your enquiry.

What are the problems with interpreters in healthcare?

Problems with interpreters in healthcare arise due to a lack of access to professionals and qualified services providers. Moreover, hospitals face budget and time limitations, which prevent them from recruiting full-time interpreters in their health are a team.

What does it mean to die with the interpreter?

But in practical terms, it also means that the information the interpreter heard or was exposed to is to die with the interpreter. The “ professional confidentiality ” is another principle without which language interpretation is not possible.

What happens when TIS National receives feedback about an interpreter?

When TIS National receives feedback about an interpreter, operator or service, it is recorded in our systems before being referred to the appropriate area in TIS National to investigate.


1 Answers

try a lot I am afraid to damage my system.

Don't worry - it's safe here. Programmers make typos all the time.

the interpreter exists

For example, a file named thefile contains the following:

#!/bin/cat
blabla

Then, when the file has executable permission bit set, then executing the file itself will execute the program /bin/cat with one argument ./thefile, as if you would type /bin/cat ./thefile in your shell. Program cat just prints the content of the file, so when exeucting ./thefile will execute /bin/cat ./thefile with will print the file content to the screen.

$ ./thefile 
#!/bin/cat
blabla

the interpreter is not available

What happens if the interpreter specified after #! is not available?

If the shebang happens to be interpreted by your shell, it would be expected that your shell will then print some kind of an information message that it can't find the interpreter, with some error description that "this file does not exist" or similar. If the file is run via one of exec*() system calls, then the kernel will return with ENOEXEC error code (per source code here)

Let's take a file named anotherfile with the following content:

#!fdsafdsafafdasfdas
blabla

For example, Bash shell will try to parse #! line by itself. Bash interactive shell would print:

$ ./anotherfile 
bash: ./anotherfile: fdsafdsafafdasfdas: bad interpreter: No such file or directory

But, for example, Busybox's Ash shell presents a different message:

$ ./anotherfile 
/bin/sh: ./anotherfile: not found

Also https://en.wikipedia.org/wiki/Shebang_(Unix) might be interesting.

like image 154
KamilCuk Avatar answered Oct 18 '22 01:10

KamilCuk