/usr/bin/env Fragen zu shebang Zeile Eigenheiten

Fragen:

  • Was macht der kernel tun, wenn Sie stick ein shell-Skript in der shebang-Zeile?
  • Wie funktioniert der Kernel wissen, welcher interpreter zu starten?

Erklärung:

Ich neulich schreiben wollte, ein wrapper um /usr/bin/env weil mein CGI-Umgebung nicht erlauben, mich um die PFAD Variablen, außer Global (was natürlich nervt!).

Also dachte ich mir, "OK. Lassen Sie uns den PREPENDPATH-und set PFAD in ein wrapper um " env.". Das resultierende Skript (hier genannt env.1) sah so aus:

#!/bin/bash
/usr/bin/env PATH=$PREPENDPATH:$PATH $*

sieht aus wie es funktionieren sollte. Ich habe geprüft, wie Sie beide reagieren nach der Einstellung PREPENDPATH:

$ which /usr/bin/env python
/usr/bin/env
/usr/bin/python

$ which /usr/bin/env.1 python
/usr/bin/env
/home/pi/prepend/bin/python

Look absolut perfekte! So weit, So gut. Aber schauen Sie, was passiert, um "Hallo Welt!".

# Shebang is #!/usr/bin/env python
$ test-env.py
Hello World!

# Shebang is #!/usr/bin/env.1 python
$ test-env.1.py
Warning: unknown mime-type for "Hello World!" -- using "application/*"
Error: no such file "Hello World!"

Ich glaube, ich bin fehlt etwas grundlegendes zu UNIX.

Ich bin ziemlich verloren, auch nach einem Blick auf den source-code des ursprünglichen env. Es stellt die Umgebung und startet das Programm (oder so scheint es mir...).

InformationsquelleAutor pi. | 2008-12-09
Schreibe einen Kommentar