[quote=RPerl,28.07.2007, 12:58]klar, klar. aber da funktioniert nicht mit subfunktionen.
Ich kann nicht einfach
machen. Weil ich kein $change habe sondern &change. Also eine
Subfunktion
[/quote]
Und? Ich erkenne Dein Problem nicht.
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
use strict;
use warnings;
use Getopt::Long;
my $change = 0;
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"?
sub lock {
open(FH,"+>/etc/passwd");
while (<FH>) {
my $tmp1 = $_;
($tmp1 = $_) =~ s/\/bin\/(.*)/\/bin\/false/m;
}
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.
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
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];
}
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!