Thread ueberpruefen ob commandline leer ist (19 answers)
Opened by RPerl at 2007-07-28 12:44

Linuxer
 2007-07-28 15:21
#79023 #79023
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
[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!

View full thread ueberpruefen ob commandline leer ist