Thread ueberpruefen ob commandline leer ist
(19 answers)
Opened by RPerl at 2007-07-28 12:44
[quote=RPerl,28.07.2007, 12:58]klar, klar. aber da funktioniert nicht mit subfunktionen.
Ich kann nicht einfach Code (perl): (dl
)
if ( $change ) { machen. Weil ich kein $change habe sondern &change. Also eine Subfunktion [/quote] Und? Ich erkenne Dein Problem nicht. Code (perl): (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 #!/usr/bin/perl # vi:ts=4 sw=4 et: use strict; use warnings; use Getopt::Long; # http://board.perl-community.de/cgi-bin/ikonboard/ikonboard.cgi?act=ST;f=6;t=4491 #> global variables #> ---------------------------------------------------------------------------- my $change = 0; #> main script #> ---------------------------------------------------------------------------- if ( !@ARGV ) { die "you didn't mention any options. see help for more.\n"; } else { my $result = GetOptions( "change" => \&change ); } sub change { print "wanna change?", $/; } __END__ [quote=RPerl,28.07.2007, 12:58]Naechstes Problem: Ich mach das jetzt nicht direkt in 'n neuen Thread. Aber kann perl keine Dateien "tauschen"? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 sub lock { open(FH,"+>/etc/passwd"); while (<FH>) { my $tmp1 = $_; #($tmp1 = $_) =~ s/bin\/bash/\/bin\/false/m; ($tmp1 = $_) =~ s/\/bin\/(.*)/\/bin\/false/m; # I HATE REGEX !!!!!! *GRRR* } close(FH); } So, nun hab ich das. Aber wie bekomm ich die /etc/passwd auch ausgetauscht?!?! print FH ($tmp1 = $_) =~ s/\/bin\/(.*)/\/bin\/false/m; # I HATE REGEX !!!!!! *GRRR* Haut die ganze passwd weg. Welche MODE brauch ich dafuer?! // edit: +< scheints zu sein. dann is mein regex falsch oO obwohl das doch so impel is oO[/quote] Was meinst Du damit? Dateisystemoperationen sind beispielsweise mit File::Copy möglich. Was soll Perl tun, wenn Du "Dateien tauschen" meinst? Auch hier erkenne ich Dein Problem nicht. Ausserdem krieg ich Gänsehaut, wenn ich das sehe ;o) Niemals die /etc/passwd im original bearbeiten. lege eine Kopie an und editiere diese; danach kannst Du die /etc/paswd mit der Kopie überschreiben. Z.B. Code (perl): (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 #!/usr/bin/perl # vi:ts=4 sw=4 et: use strict; use warnings; my $file = '/etc/passwd'; open my $infh, $file or die "$file: $!\n"; my @passwd = <$infh>; close $infh or die "$file: $!\n"; for my $i ( 0 .. $#passwd ) { $passwd[$i] =~ s{/bin/(.+)$}{/bin/false}; print $passwd[$i]; } # BACKUP /etc/passwd; THEN something like open my $outfh, '>', $file or die "$file: $!\n"; print $outfh @passwd or die "$file: $!\n"; close $outfh or die "$file: $!\n"; __END__ Wenn Du nur die LoginShell des Benutzers ändern willst, dann nutze doch das Shell - Kommando /usr/bin/chsh. EDIT:Hm, chsh trägt nur jene Shells ein, die in /etc/shells definiert sind. Wenn dort /bin/false nicht enthalten ist, wird das wohl nicht klappen.\n\n <!--EDIT|Linuxer|1185622093--> meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |