1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Ruby: Shebang-Zeile

Dieses Thema im Forum "macOS & OS X" wurde erstellt von ernesto, 07.11.07.

  1. ernesto

    ernesto Boskoop

    Dabei seit:
    14.04.07
    Beiträge:
    41
    Hallo Leute,

    Wie muss die Shebang-Zeile für Ruby unter Leopard aussehen?
    (Ruby ist doch Teil der Installation?)

    Der Hintergrund der Frage ist, dass mir ein Freund (der sich mit OS X nicht auskennt) ein kleines Ruby-Programm geschrieben hat, jedoch lautete seine Shebang-Zeile:

    #! /usr/bin/env ruby

    da dies nicht zu meinem system passt, habe ich das verzeichnis entsprechend geändert, aber nichts hat geholfen.

    Ich würde mich sehr über eine Antwort freuen,

    mfg
    ernesto
     
  2. mfkne

    mfkne Weisser Rosenapfel

    Dabei seit:
    03.04.06
    Beiträge:
    776
    bei mir ist ruby in /usr/bin/ruby, also #!/usr/bin/ruby
     
  3. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    schau doch mal mit "whereis env" oder "whereis ruby" wo die files bei dir liegen
     
  4. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.902
    1) Zwischen dem '!' und dem ersten Zeichen des Pfades '/' darf kein Leerzeichen stehen.
    2) Die Verwendung von env verwundert. Das wird was genau?
     
  5. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    zu 2)

    NAME
    env -- set and print environment

    das soll eine gewisse variabilität zwschen systemen schaffen...sofern env immer im gleichen pfad liegt
    env gibt dann den pfad zu ruby wider
     
  6. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.902
    Ich weiss nicht so recht was du damit ausdrücken möchtest.
    Aber irgendwie scheinst du den Sinn von env nicht so ganz verstanden zu haben.
    env ist kein im System freigegebener Befehlsinterpreter (/etc/shells). Das Spiel wird nicht funktionieren, was auch immer es hätte bezwecken sollen.
     
  7. unknown7

    unknown7 Saurer Kupferschmied

    Dabei seit:
    28.01.07
    Beiträge:
    1.699
    Sry für das OT:

    Aber das ist der Thread im ganzen Forum bei dem ich am wenigsten kapier um was es geht :-D
     
  8. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    @Rastafari: Wieso muss env in /etc/shells enthalten sein? Ein Skript mit Shebang
    Code:
    #!/usr/bin/env ruby
    müsste eigentlich funktionieren. Halt ohne Leerzeichen nach dem !.

    @unknown7: Shebang - Wikipedia
     
  9. unknown7

    unknown7 Saurer Kupferschmied

    Dabei seit:
    28.01.07
    Beiträge:
    1.699
    :) Danke, aber hatte ich mittlerweile eh schon durchgelesen - bin ein wissensdurstiger Mensch ;)
     
  10. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    soweit ich das verstanden habe, startet env das programm ruby aus dem verzeichniss, in dem es installiert wurde..
    dabei schaut env halt nach, wo es in dem jeweligen system installiert ist.

    im shebang muss doch nicht nur ein interpreter stehen..

    versuch mal #!/bin/cat

    dabei wird der befehl ausgeführt und der eigene dateiname als 1.parameter übergeben
     
  11. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.902
    Weil ein Shebang keine normale Befehlszeile ist. Ein Line-Parsing mit Word Splitting, Substitution und Argumentübergabe wie im restlichen Skript gibt es hier nicht.
    Code:
    man bash
    Du versuchst einen Kommandointerpreter zu definieren (der in /etc/shells als "genehmigt" eingetragen sein muss), das Kommando "env" ist aber definitiv keiner.
     
  12. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Dann erklär mir doch mal, wieso man (unter Tiger zumindest) folgendes Skript
    Code:
    #!/usr/bin/env cat
    Hallo Welt!
    ausführen darf (executable-Flag gesetzt, mit "./testskript" gestartet). ;)

    Die Auflösung via env ist zwar nicht POSIX-standardisiert, funktioniert aber unter Linux, BSD-Unixen und wie gesagt zumindest Tiger.
     
  13. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.902
    Weil du es von der Console aus startest.
    Ausserdem wirst du feststellen, dass das nicht im geringsten das tut was du wolltest.
     
  14. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    oder warum auch nur #!/bin/cat funzt, obwohl es nicht in etc/shells eingetragen ist
     
  15. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Ok. Du meinst, ein Serverprozess dürfte ein solches Skript nicht ausführen? Wieso klappt es dann für Perl-Skripte?
    Dann nehmen wir halt
    Code:
    #!/usr/bin/env perl
    ... tue irgend etwas ...
    
     
  16. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.902
    Und was bekommst du als Ergebnis, hm?
    Code:
    man bash
    Das wird von der Standard-Loginshell interpretiert, wenn der Aufruf fehlschlägt.
     
  17. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.902
    Das ist gleichbedeutend mit:
    Code:
    #!/bin/bash
    /usr/bin/env perl ${*} .....
    
    Aber nur für diejenigen Benutzerkonten, die auch eine Login-Shell haben. Gurks!
    Ausserdem:
    Code:
    man env
    
     
  18. hades

    hades Morgenduft

    Dabei seit:
    03.12.05
    Beiträge:
    169
    OT:
     
  19. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Du behauptest also, ein CGI-Skript der Form sagen wir
    Code:
    #!/usr/bin/env ruby
    print "HTTP/1.0 200 OK\r\n"
    print "Content-type: text/html\r\n\r\n"
    print "<html><body>Hello World!</body></html>\r\n"
    
    (klick) würde nicht funktionieren?
     
  20. ernesto

    ernesto Boskoop

    Dabei seit:
    14.04.07
    Beiträge:
    41
    Hallo,
    erstmal Danke für die zahlreichen Antworten.

    Ich habe das Problem immernoch... Das Leerzeichen war im Programm selbst nicht enhalten, war mein eigener Fehler beim Schreiben des Beitrags, entschuldigt dafür.

    das Verzeichnis /usr/bin/env ist tatsächlich auch bei mir genauso vorhanden. Also liegt es nicht wie ursprünglich gedacht daran.

    @rastafari
    Es soll mir eine Latex-Datei generieren, in der bestimmte Art von mathematischen Diagrammen codiert ist. Ich muss dann nur noch einen simplen Code in eine Text-Datei (im folgenden "test.ssp" genannt) schreiben, die die Informationen enthält, wie mein Diagramm aufgebaut werden soll (Weil ich viele solcher Diagramme benötige, hatte mein Freund die Idee, ein Prgramm für diese Übersetzung zu schreiben) Er hat nun ein Ruby-Programm (in der Datei "ssp.rb", worin natürlich auch die besagte Shebang-Zeile steht) geschrieben und ich soll es mit

    ./ssp.rb test.ssp

    aufrufen. Aber das Terminal gibt daraufhin "env: ruby\r: No such file or directory" aus. Daraus ziehe ich den Schluß, dass Ruby nicht aus diesem Verzeichnis aus geladen werden kann. Eine Ersetzung in der Sheband-Zeile von "env" zu "ruby" bringt auch nichts.

    Habt ihr vielleicht noch eine andere Idee, woran es liegen könnte?

    Gruß
    ernesto
     

Diese Seite empfehlen