Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

How to tell whether script is invoked from command line or not

by theguvnor (Chaplain)
on Dec 20, 2004 at 19:55 UTC ( #416293=perlquestion: print w/replies, xml ) Need Help??

theguvnor has asked for the wisdom of the Perl Monks concerning the following question:

Anybody got any neat tricks for determining at run-time whether your script was executed by a user on a command line, versus being run by another process (e.g. a cron job)? I'd like to print more verbose status info to STDOUT if run by a live user on the command line, but more compact "net" info to be piped into a text file if run by cron. I could always alter the script to look for a -v switch, but for my own illumination I was wondering if there was a way that avoided altering my script :-)

Update: thanks both Corion and jfroebe. I don't own the Cookbook, so I wasn't aware of that snippet. I did peruse the perlrun and perlvar docs before posting my question (which I should have mentioned). I never would have thought to look at the -X functions!


  • Comment on How to tell whether script is invoked from command line or not

Replies are listed 'Best First'.
Re: How to tell whether script is invoked from command line or not
by jfroebe (Parson) on Dec 20, 2004 at 20:06 UTC


    This is covered in the "Testing Whether a Program Is Running Interactively" in the Perl Cookbook (ISBN 0-596-00313-7).

    sub I_am_interactive { return -t STDIN && -t STDOUT; }

    Now, this isn't always full proof by any means. You could close either STDIN or STDOUT prior to checking. What I mean, is that if you use the example from the Perl Cookbook, then don't close either descriptor until after you test for interactivity. Be careful... especially if you are going to be using the code snippet in legacy code.

    Jason L. Froebe

    Team Sybase member

    No one has seen what you have seen, and until that happens, we're all going to think that you're nuts. - Jack O'Neil, Stargate SG-1

Re: How to tell whether script is invoked from command line or not
by Corion (Pope) on Dec 20, 2004 at 19:59 UTC

    See perldoc -f -X:

    my $loglevel; $loglevel++ if -t STDOUT; print "Log level is $loglevel\n";

    This will not work if the user is running your program through less or any other pager I guess.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://416293]
Approved by Corion
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: (2)
As of 2020-10-27 05:57 GMT
Find Nodes?
    Voting Booth?
    My favourite web site is:

    Results (256 votes). Check out past polls.