• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Ruby: Shebang-Zeile

Es könnte an etwas ganz banalem liegen: einem Steuerzeichen am Ende der ersten Zeile. Lösche die Shebang-Zeile mal komplett raus (inklusive Zeilenumbruch) und tippe sie neu ein. Klappt es dann?
 
Es hat sich zumindest etwas getan. Wenn ich nun

./ssp.rb test.ssp

eingebe, spuckts folgendes aus:

./ssp.rb:4:in `initialize': No such file or directory - test.ssp (Errno::ENOENT)
from ./ssp.rb:4:in `open'
from ./ssp.rb:4:in `seqopen'
from ./ssp.rb:105

Die Datei test.ssp ist aber im verzeichnis vorhanden. Der Anfang der Datei ssp.rb sieht nun so aus:

#!/usr/bin/env ruby
#
def seqopen

@file = File.open(ARGV[0])

end



def seqclose

@file.close

end

...
 
Ohne Einblick in den Quellcode - insbesondere Zeile 4 - wird's schwierig...
 
Ja, dem stimme ich zu :-)
Ich glaube zwar nicht, dass der Autor was dagegen hat, aber ich werde ihn lieber fragen, bevor ich den Quellcode poste. Das geschieht dann frühestens morgen.
 
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?
Das behaupte ich, ja. Jedenfalls nicht ohne weitere (nicht ratsame) Eingriffe.
Weil:
Code:
env - /usr/bin/sudo -u www /usr/bin/env apachectl configtest
...vermutlich nicht das ergibt, was du erwartest.
(Nur so als Beispiel...)
Kopfnuss?
Na, deshalb:
Code:
env - /usr/bin/sudo -u www /bin/bash -ic 'echo $PATH'
 
Hallo,
also ich darf den Code posten. Aber ich soll um Milde bitten, es sei sein erstes Ruby-Programm ;-)
Natürlich sind Verbesserungsvorschläge willkommen.

Code:
#!/usr/bin/env ruby
#
def seqopen
	@file = File.open(ARGV[0])	
end

def seqclose
	@file.close
end	

def read_quadrant
	@quadrant = Array.new
	cnt = 0
	@maxx = 0
	@file.each_line do |line|
		next if line =~ /^#/
		@quadrant[cnt] = parse_line(line)
		if @quadrant[cnt].length > @maxx 
			@maxx = @quadrant[cnt].length
		end
		cnt = cnt + 1
	end
end

def parse_line(line)
	@elements = line.chomp.split(/\s*\|\s*/)
	return @elements
end

def make_grid
	dimy = 0.5 + @quadrant.length + 0.5
	dimx = 0.5 + @maxx + 0.5
	puts "\t % draw coordinate system"
	puts "\t \\draw [->] ( 0 , 0 ) -- ( 0 , #{dimy} );"
	puts "\t \\draw [->] ( 0 , 0 ) -- ( #{dimx} , 0 );"
end

def make_arrows
	x = 0
	y = 0
	@quadrant.reverse!
	@quadrant.each do |row|
		row.each do |elem|
			arrowgrad = @quadrant[y][x].scan(/\(\d\)/)
			if arrowgrad.to_s != ''
				@quadrant[y][x] = elem.sub(/\(\d\)/, '')
				grad = arrowgrad.to_s.scan(/\d/).to_s
				puts "\t \\draw [->] (#{x+1.23},#{y+0.73}) -- (#{x+0.75+grad.to_f},#{y+2.25-grad.to_f});"
			end
			x = x + 1
		end
		y = y + 1
		x = 0
	end
end

def make_entries
	x = 1
	y = 1
	puts "\t % Quadrant 1"
	#@quadrant.reverse!
	@quadrant.each do |row|
		puts "\t % begin row"
		row.each do |elem|
			puts "\t \\node at ( #{x} , #{y} ) [rectangle,fill=white] {$#{elem}$};"
			x = x + 1
		end
		y = y + 1
		x = 1
	end
end

def write_header
	puts "\\documentclass{article}"
	puts ""
	puts "% -- Package used for the graphics --"
	puts "\\usepackage{tikz}"
	puts ""
	puts "% -- Start of the main document --"
	puts "\\begin{document}"
	puts ""
end
	
def write_tikzstart
	puts ""
	puts "% -- start of the spectral sequence --"
	puts "\\begin{tikzpicture}"
	puts ""
end
	
def write_tikzend
	puts ""
	puts "\\end{tikzpicture}"
	puts "% -- end of the spectral sequence --"
	puts ""
end
	
def write_eof
	puts ""
	puts "\\end{document}"
	puts "% -- EOF --"
end


seqopen
write_header
write_tikzstart
read_quadrant
make_grid
make_arrows
make_entries
write_tikzend
write_eof
seqclose

Die Testdatei, die eingelesen werden soll, sieht so aus:

Code:
x (1)| y (2)| z 
a    |      | c | k
1    | 2    | 3 | b_1
 
Irgendwie haben wir in diesem Thread jetzt zwei Themen...

@Rastafari:
Das behaupte ich, ja. Jedenfalls nicht ohne weitere (nicht ratsame) Eingriffe.
Ok. Um es nochmal zu wiederholen: Dein Punkt ist, dass Skripte, welche mit den Rechten eines Benutzers ohne Login-Shell laufen, in der Shebang-Zeile u.U. kein /usr/bin/env benutzen können? Zu diesem Zweck habe ich im CGI-Verzeichnis meines (unmodifizierten) Apache 1.3.33 unter Tiger mal das Testskript
Code:
#!/usr/bin/env perl
print "Content-type: text/html\n\n";
print "<html><body>Hello World!</body></html>\n";
abgelegt. Rechte und Eigentümer sehen wie folgt aus:
Code:
power-mac-g4:/Library/WebServer/CGI-Executables thorsten$ ls -l
total 8
-rwxr-xr-x   1 www  www  107 Nov  8 21:12 test.pl
Et voilà, das Skript funktioniert wie gewünscht:

bild1cf5.png


Und jetzt kommst Du... ;-)

Aber ich glaube, bei ernesto geht es sowieso nur um ein Skript, das er von der Shell aus startet.


@ernesto: Probier es doch erst mal mit einem abgespeckten Dummy-Skript.
Code:
#!/usr/bin/env ruby
#
@file=File.open(ARGV[0])
@file.close

Funktioniert das bei Dir? Bei mir z.B. schon.
 
@quarx Ok, diesen dummy-skript habe ich unter "test.rb" abgespeichert, sowie eine Testdatei test.ssp, die eingelesen werden soll (sie sieht genau so aus wie oben, aber das sollte ja keine Rolle spielen?). Führe ich im Terminal den Befehl

./test.rb test.ssp

aus, so bekomme ich wieder die Fehlermeldung

./test.rb:3:in `initialize': No such file or directory - test.ssp (Errno::ENOENT)
from ./test.rb:3:in `open'
from ./test.rb:3

Benutze ich eigentlich die richtige Syntax, um test.ssp einzulesen?

Oder anders gefragt: wenn Du meinst "bei mir funktioniert das schon?", was genau funktioniert da, welche Befehle genau gibst Du im Terminal ein? Sorry, für die dummen Fragen, aber ich habe wirklich kein Hintergrundwissen darüber, wie das ganze funktioniert.
 
Also ich bekomme mit dieser Datei test.rb
Code:
#!/usr/bin/env ruby
#
@file=File.open(ARGV[0])
@file.close
und einer beliebigen Datei test.ssp im gleichen Verzeichnis nach
Code:
./test.rb test.ssp
keinen Fehler. :-/

(Power Mac G4, OS X 10.4.10)
 
Ja, seltsam...
ich sitze an einem MacBook mit Leopard (vor kurzem über Tiger aufgespielt - bisher keine Probleme). Wenns am letzterem liegt, ja dann...
Ja, gute Frage. Vorschläge? :-/
 
Ha! es ist noch viel banaler als Du dachtest, quarx :-) Da es ja nun an der Datei test.ssp liegen musste, habe ich sie mir genauer angeguckt. Aus irgendwelchen Gründen (ja, hauptsächlich meine Unachtsamkeit) wurde sie als test.ssp.txt gespeichert und der suffix ist nicht sichtbar. Nachdem das korrigiert war, läuft alles.

Vielen Dank für Deine Hilfe!