Leser: 1
|< 1 2 >| | 14 Einträge, 2 Seiten |
chmod (744, $einstellungen);
open (EINSTELLUNGEN, "|$einstellungen");
chmod (0744, $einstellungen) or die ("$!");
open (EINSTELLUNGEN, "|$einstellungen") or die ("$!");
1 2 3 4 5
# $mode muss nicht sein; der Mode kann ruhig direkt angegeben sein; # habe es hier nur zwecks Dokumentation in eine benannte Variable gepackt. open my $filehandle, $mode, $path_of_file or die "$path_of_file: open($mode) failed: $!\n"; # ... close $filehandle or die "$path_of_file: close($mode) failed: $!\n";
GwenDragon+2008-11-20 19:40:32--1. dein chmod ist falsch.
Quotechmod braucht oktale Zahlen. [...]
GwenDragon+2008-11-20 19:40:32--1. dein chmod ist falsch. chmod braucht oktale Zahlen.
2. Du solltest sowohl bei chmod und open prüfen, warum es nicht klappte.
3. Warum eine Pipe? ist $einstellungen kein Dateiname?
Vielleicht so:
Code: (dl )chmod (0744, $einstellungen) or die ("$!");
und
Code: (dl )open (EINSTELLUNGEN, "|$einstellungen") or die ("$!");
Etwas schwierig, so zu vermuten mit nur zwei Zeilen Code, ohne das Skript zu sehen.
echo "Hallo Welt" | $EDITOR -
1 2 3 4 5 6 7
# ideal wäre noch ein Test, ob X oder Terminal verfügbar ist, oder nicht # danach könnte man den festen Editor festlegen my $editor = $ENV{EDITOR} || '/usr/bin/gvim'; open my $pipe, '|-', "$editor -" or die "Cannot open pipe to $editor: $!\n"; print $pipe $daten_fuer_editor; close $pipe or die "Cannot close pipe to $editor: $!\n";
Snicker+2008-11-21 16:51:25--[...]
1.
beim chmod ändert sich leider nichts. Eine Fehlermeldung bekomme ich auch nicht zurück. Tippe mal, dass es an der Live session liegt.
QuoteEs ist schon richtig, dass 0744 = rwxr--r-- ist. Unter dem aktuellen User soll die Datei ausführbar sein. Dachte, dass ich dadurch die Textdatei $einstellungen in einem Fenster öffnen lassen könnte.
Quote2./3.
das | ist, wie ich es nun nachgelesen habe auf Unix falsch. Bei Windows führt es dazu, dass das Programm / Datei im UI aufpoppt. In Windows wurde hier immer der Editor gestartet, der mit die Werte aus meiner Textdatei $einstellungen angezeigt hat.
[...]
Linuxer+2008-11-21 17:03:53--Ich würde auf eine Umgebungsvariable $EDITOR prüfen; wenn sie existiert, diese auch nutzen; wenn nicht auf einen (fest kodierten) Standardeditor zurückfallen. [...]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
#!/usr/bin/perl use strict; use warnings; my $file='/tmp/test.txt'; # Datei erzeugen und mit irgendwas füllen # echo ist einfach am kürzesten :) system("echo Das ist ein test > $file"); # es gibt module, # die zuverlässig unbenutzte temporäre Dateienamen erzeugen. # für das Beispiel hier nutze ich sie nicht... # Die xdg-tools des LSB sind der portabelste Weg, # Benutzerspezifische Programme zu starten. # Editor starten system("xdg-open",$file) == 0 or die "$@"; # leider werden alle Prozesse unabhängig gestartet, # sodass xdg-open sofort zurückkehrt. # es wird also eine anderer weg benötigt, # um heraus zu finden, wann der Nutzer mit dem Editieren fertig ist. # Ein weg währe mittels "ps" abzufragen, # wer den Dateinamen als Kommandozeilenoption übergeben bekommen hat. # der Nachteil ist, dass es Möglichkeiten gibt # Kommandos an ein Programm zu übergeben, # die in der Kommandozeile nicht auftauchen. # Also schaue ich in /proc um zu sehen, # welche Programme die Datei geöffnet haben. # zusätzlich überprüfe ich die Kommandozeile, # vielleicht habe ich Glück. :) # auch das ist nicht zuverlässig, # denn das Programm könnte die Datei zwischenzeitlich schließen # ein wenig warten... select(undef,undef,undef,0.2); # herausfinden welches Programm die Datei geöffnet hat my @prgs; # /proc auflisten for my $prg (grep{m!/\d+$!}glob("/proc/*")) { # eigens Programm ausschließen next if($prg=~/$$/); # nur Programme des Benutzers sind interessant if(-o $prg) { # enthält die Kommandozeile den Dateinamen? my $cmdline=do{local(@ARGV,$/)="$prg/cmdline"; <>}; if($cmdline=~/\Q$file\E/) { my $exe = readlink("$prg/exe"); my ($pid) = $prg=~m!/(\d+)$!; push(@prgs,[$pid,$exe]); last; } # Dateinamen der geöffneten Dateien vergleichen for my $fd (map{readlink($_)}glob("$prg/fd/*")) { # Wenn die Pfade gleich sind haben wir es gefunden if($fd eq $file) { my $exe = readlink("$prg/exe"); my ($pid) = $prg=~m!/(\d+)$!; push(@prgs,[$pid,$exe]); last; } } } } # mal ausgeben wer es ist... for my $prg (@prgs) { print "Running $prg->[1] to edit $file\n"; } # darauf warten, dass das Programm beendet wird my $still_running=@prgs; while($still_running) { sleep 1; $still_running=0; for my $prg (@prgs) { $still_running++ if(-e "/proc/".$prg->[0] && readlink("/proc/".$prg->[0]."/exe") eq $prg->[1]) } } # Datei wieder einlesen my $data=do{ local(@ARGV,$/)=$file; <>; } warn "$!"; # Datei löschen unlink($file) or warn "$!"; # daten ausgeben/verarbeiten print "DATA:\n$data\n" if($data);
|< 1 2 >| | 14 Einträge, 2 Seiten |