Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]76[/thread]

Einzeiler als Programm auf Server ausführen: Wie?



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
pktm
 2003-10-22 15:51
#7558 #7558
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Ich habe heir diesen Einzeiler aus der TWiki-Installationsanweisung (das Ding, woraus unsere FAQ besteht).
Code: (dl )
1
2
cd twiki/data
perl -pi~ -e 's/nobody:/schularchiv:/' */*,v


Ich müsste diesen auf meinem Webspace ausführen, ahbe aber keine Ahnung wie.
Das Probelm sind die Flags, was bedeuten die?
Wie sähe ein Script aus, dass ich aus dem cgi-bin aus starten könnte?
Das Verzeichnis, welches ich bearbeiten müsste liegt unter schularchiv.bildung-rp.de/twiki/data
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
format_c
 2003-10-22 16:02
#7559 #7559
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Also das -pi~ hab ich so verstanden, dass Backups von veränderten Dateien erstellt werden mit der Extension ~. was */*,v genau macht weis ich nicht.

Gruß alex
Strat
 2003-10-22 16:03
#7560 #7560
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
am besten ist die ausfuehrung in der shell, also ueber ssh oder telnet.
Du kannst das Script aber auch aus einem cgi-script heraus wie jedes andere kommando ausfuehren, also pipe-open, backticks, system, ...

Eine allgemeine Erklaerung zu den Parametern bekommst du, wenn du in der shell eingibst:
perl -h

Vielleicht willst du dir auch mal den Vortrag durchlesen, den ich auf dem letzten Perl-Workshop gehalten habe: Perl in der Shell
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2003-10-22 16:16
#7561 #7561
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, das Problem ist, dass ich keine Shell zur Verfügung haben. Ich kann mich nur per ftp einloggen.
Aber das mit dem System-Befehl versuche ich mal.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
betterworld
 2003-10-22 16:20
#7562 #7562
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
*,v klingt nach cvs
Geewiz
 2003-10-22 16:26
#7563 #7563
User since
2003-09-29
69 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=pktm,22.10.2003, 13:51][/quote]
Code: (dl )
perl -pi~ -e 's/nobody:/schularchiv:/' */*,v


bewirkt, dass der Perl-Interpreter in allen Unterverzeichnissen alle Dateien, die auf ",v" enden (RCS- bzw. CVS-Archive) abarbeitet.

Das Script -- also die Regex -- wird auf jede einzelne Zeile der jeweiligen Datei angewendet (-p) und das Ergebnis direkt zurück in die Datei geschrieben (-i). Die Originaldatei bleibt als Backup (-~) erhalten.
Strat
 2003-10-22 17:11
#7564 #7564
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
also -e: fuehre den dahinter folgenden string als kommando aus s/nobody:/schularchiv:/
-i fuehre ein Inplace-Edit durch (ersetze die Datei direkt) und mache ein backup mit der Endung ~
-p lege eine while(<>) - schleife um den Input (*.* = alle Dateinamen) und weise eine Zeile (=einen Dateinamen) $_ zu. Gebe danach $_ aus

-n ist das gleiche wie -p, nur dass bei -n der Inhalt $_ nicht automatisch ausgegeben wird
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Dubu
 2003-10-23 00:11
#7565 #7565
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Fast.
Input sind nicht die Dateinamen, sondern die Dateiinhalte. Die Anweisung wird also auf alle Zeilen aller Dateien angewendet.

@pktm: Warum aenderst du die Dateien nicht auf deinem Rechner und laedst die geaenderten Dateien wieder hoch? (Rechte und Besitzer beachten!)
pktm
 2003-10-23 12:00
#7566 #7566
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Naja, weil ich nicht wusste was der Einzeiter macht ;)

EDIT: habe jetzt übrigens versucht das ganze lokal auf meinem Rechner zu machen, nur kann Windoof mit der Angabe */*,v - wobei ,v einen Teil der Endung darstallt - nichts anfangen...
Quote
invalid argument
\n\n

<!--EDIT|pktm|1067250649-->
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2003-10-27 12:24
#7567 #7567
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Also ich habe mir da jetzt folgendes Programm zu geschrieben - bis jetzt ohne die Dateien zu modifizieren, weil ich erst gucken will, ob es denn auch macht, was ich will:
Code: (dl )
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
#!/usr/bin/perl -w
use strict;
use CGI qw/:standard/;
use CGI::Carp qw( fatalsToBrowser warningsToBrowser);
use File::DosGlob;
use File::Find;
use Data::Dumper;



my $cgi = CGI->new();
print $cgi->header(), "Alle Verzeichnisse:<br />\n";
warningsToBrowser(1);

my $wantedVerz = '/home/www/bildung-rp/schularchiv/twiki/pub';
my @verz = ();
my @allvFiles = ();

sub wanted {
return if (/^\.$/ or /^\.\.$/);
print "[$_] is ein verzeichnis<br />\n" if (-d $_);
 push @verz, $_;
}
find ({wanted =>\&wanted, no_chdir => 1}, $wantedVerz);

foreach( @verz ){
   push @allvFiles, &File::DosGlob::glob("$_/*.*,v");
}

print "Alle v-Dateien:<br />\n";

print Dumper( @allvFiles );

print "<h1>Dateien:</h1>\n";

foreach my $file( @allvFiles ){
   if( -d $file ){ next; }
   open(DAT, "+>>$file") || die "$!";
   flock DAT, 1;
   foreach( <DAT> ){
       $_ =~ s/nobody:/schularchiv:/;
       print "$_\n";
   }
   close(DAT);
}

exit( 1 );

Was man aus einem Einzeiler nicht so alles meachen kann.
Naja, mein Problem:
Unten, da wo eigentlich substituiert werden soll erhalte ich keine Ausgabe.
Wieso?
Der Rest funktioniert, also ich erhalt eine Liste mit Allen Verzeichnissen und eine mit Allen geuchten Dateien.
mfg pktm\n\n

<!--EDIT|pktm|1067250333-->
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2003-10-22 15:51.