On parle de moi (j'aime faire mon Jean-Claude Convenant).
Bon, sinon, il y a effectivement une erreur dans ton script, la bonne syntaxe est :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#!/usr/bin/perl -w
use Carp;
use strict;
sub login{
my($login, $password) = @_;
system("whoami");
open(loginDesc, "| su - $login");
print loginDesc "$password";
close(loginDesc);
system("whoami");
}
login('toto', 'tata'); |
Quelle est la différence ? Quand on écrit
open(loginDesc, "| su - $login");
On transmet dans le flux des informations au programme que l'on lance. Alors qu'à cette ligne :
open(loginDesc, "su - $login |");
, le programme transmet au flux et non plus sur la sortie standard.
Toutefois, concernant ton problème, il faut savoir que su ne amrchera pas ainsi te réclamant qu'il ne peut s'ouvrir que depuis un terminal.
Je te conseille alors de lancer ce script via un sudo, qui sera sans doute moins casse-tête.
Pour sinon faire suite à Katyucha qui est mon agent publicitaire, voici les liens vers la FAQ Perl et la rubrique Perl où tu auras accès à mes cours. Enfin, je m'excuse de ne pas avoir abordé ce détail dans les redirection et je vais veiller à réparer cette omission.
@++
PS : il n'y a pas encore de commande GLDavid sur les Unix standard mais cela ne saurait tarder. Aïe, j'ai mal aux chevilles !
Partager