Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re: Taking Input And Running In Script

by simeon2000 (Monk)
on Jul 31, 2002 at 18:54 UTC ( #186560=note: print w/replies, xml ) Need Help??

in reply to Taking Input And Running In Script

If you're in unix, and you don't want your PASSWORD to appear on the command line, you can set it in environment variables like so:

$ USERNAME=jim PASSWORD=spekkio perl

Then the code could:


However, this approach also has some pitfalls, and you must be VERY careful with it... but at least it's better than having your password in the process table :P

perl -e "print qq/just another perl hacker who doesn't grok japh\n/"

Replies are listed 'Best First'.
Re: Re: Taking Input And Running In Script
by hostux (Initiate) on Jul 31, 2002 at 19:06 UTC

    cheers guys for that.

    that worked great, but if you don't mind, cna i ask you one more question? This is the script that i am using below:

    #!/usr/bin/perl -w use strict; use Getopt::Long; my ($username, $password, $domain); my $result = GetOptions("username=s" => \$username, "password=s" => \$password, "domain=s => \$domain"); system ("adduser $username -g 100 -s /bin/false -d /home/$username -p +$password"); + open (VFILE, ">> /etc/postfix/virtual"); + + print VFILE "$username\\t$username\n"; close (VFILE); system ("postmap /etc/postfix/virtual");

    when the command adduser is run, if it returns adduser: user foo already exists

    i want it to break out of running the rest of the script and maybe just return an error


    Edited: ~Wed Jul 31 23:07:40 2002 (GMT) by footpad: Added <code> and other HTML formatting tags.

      first, please use code tags. As for your question of breaking out, check the return value of system ($?). Most unix commands return 0 upon success and something else upon failure (not quite sure what the failure codes are for adduser but I get a 9 when you try to add an all ready existing user).

      #!/usr/bin/perl -w use strict; use Getopt::Long; my ($username, $password, $domain); my $result = GetOptions("username=s" => \$username, "password=s" => \$password, "domain=s" => \$domain ); system("/usr/sbin/adduser $username -g 100 -s /bin/false -d /home/$use +rname -p $password"); if( $? >> 8 == 0 ) { # success open (VFILE, ">> virtual"); # you should check for failure here print VFILE "$username\\t$username\n"; close (VFILE); # Do you need to check this? system ("postmap /etc/postfix/virtual"); } else { print STDERR "bailing with ret code of ", $? >> 8, "\n"; }

      see system on interpretting return codes (that shifty bit stuff).


      Ouch ...Please use code tags next time. On your question( at least what I think you question is ;) Try just using adding or die "whatever you want the error to be $!\n" to the system line -Aseidas

      UPDATE:disregard my method for the error trapping. Please use Derby's method mine is very simplistic and in reading your post again will not really do what you want i.e; exit on that specific error but please do use code tags

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://186560]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2023-03-21 08:56 GMT
Find Nodes?
    Voting Booth?
    Which type of climate do you prefer to live in?

    Results (59 votes). Check out past polls.