2015-05-01 11 views
10

Die scala Dokumentation zeigt, dass die Art und Weise ein scala Skript zu erstellen, wie dies (#!):Warum verwendet Scala eine umgekehrte shebang statt nur Einstellung Interpreter scala

#!/bin/sh 
exec scala "$0" "[email protected]" 
!# 
/* Script here */ 

Ich weiß, dass diese scala ausführt mit dem Namen der Skriptdatei und den Argumenten, die daran übergeben werden, und dass der Befehl scala anscheinend eine Datei liest, die so beginnt und alles bis zum umgekehrten Shebang ignoriert. Meine Frage ist: Gibt es irgendeinen Grund dafür? Warum sollte ich dieses (ziemlich ausführliche) Format für ein Scala-Skript verwenden, anstatt nur:

Dies, so weit ich aus einem Schnelltest sagen kann, macht genau das gleiche, ist aber weniger wortreich.

+0

Das einzige, was ich bekam, ist offensichtlich flexibler und lässt Sie Umgebungsvariablen (z. B. '_JAVA_OPTIONS') vor dem Start des Skripts setzen. –

Antwort

3

Wie alt ist die Dokumentation? Normalerweise wurde diese Art von Sache (oft als "der Exec-Hack" bezeichnet) empfohlen, bevor /bin/env üblich war, und dies war der beste Weg, um die Funktionalität zu erhalten. Beachten Sie, dass /usr/bin/env häufiger als /bin/env ist und stattdessen verwendet werden sollte.

+0

Dies ist sowohl in der alten Dokumentation als auch in der aktuellen Dokumentation enthalten. http://www.scala-lang.org/documentation/getting-started.html – zstewart

+2

Zu der Zeit als Scala erfunden wurde, '/ usr/bin/env' (es ist'/usr/bin/env', nicht '/ bin/env) seit über einem Jahrzehnt fest etabliert, und ich bezweifle, dass es eine Plattform gibt, auf der Scala und Shebang funktionieren, aber nicht "/ usr/bin/env". – Gilles

+0

@Giles '/ bin/env' ist häufig genug (obwohl Linux standardisierte'/usr/bin/env', auf Red Hat '/ usr/bin/env' ist ein Symlink zu'/bin/env' , oder zumindest war das letzte Mal, dass ich schaute), aber da das OP '/ bin/env' erwähnt, ist es sinnlos, über'/usr/bin/env' zu sprechen. –

1

Beachten Sie, dass es /usr/bin/env ist, nicht /bin/env.

Es gibt keine Vorteile bei der Verwendung einer Zwischenschale anstelle von /usr/bin/env, außer in einigen seltenen antiken Unix-Varianten, in denen env nicht in /usr/bin ist. Nun, technisch gibt es SCO noch, aber läuft Scala überhaupt dort?

jedoch der Vorteil der Shell-Variante ist, dass es die Möglichkeit abzustimmen gibt, was ausgeführt wird, zum Beispiel Elemente PATH oder CLASSPATH hinzufügen oder Optionen hinzuzufügen wie -savecompiled den Interpreter (wie in den manual gezeigt) . Dies könnte der Grund sein, warum die Dokumentation die Shell-Form vorschlägt.

Ich bin nicht auf dem Scala-Entwicklungsteam und ich weiß nicht, was die historische Motivation für die Scala-Dokumentation war.

+0

Pedanterie, über die bin env ist in der Frage nicht relevant, da einige Systeme ihre 'bin' anders konfigurieren, und diese Frage ist nicht darüber. Informationen über andere Konfigurationen, die in der spezialisierten Variante durchgeführt werden können, sind nützlich. – zstewart

0

Scala hat nicht immer /usr/bin/env unterstützt. Es gibt keinen besonderen Grund dafür, nur, ich stelle mir vor, die Person, die die Unterstützung für Shell-Skripte geschrieben hat, war mit dieser Syntax Mitte der 00er Jahre nicht vertraut. Die Dokumentation folgte, was unterstützt wurde, und ich fügte hinzu, /usr/bin/env Unterstützung irgendwann (IIRC), aber nie störte die Dokumentation zu ändern, es scheint.

Verwandte Themen