Thanks for the tips, guys.

The %ENV hash suggestion worked -- I'm actually writing a filter for BBEdit
(OS X) that I also want to work from the command line, and also on IRIX
boxes.  Turns out that all CLIs have $ENV{TERM} defined, but within BBEdit
it's not.

But turns out it doesn't matter anyway!  I thought BBEdit required "\r"
linebreaks internally, but apparently it translates the "\n"s it gets from
unix filters, so it doesn't matter.

Thanks again.

- B


> On 7/27/05, Bryan R Harris <[EMAIL PROTECTED]> wrote:
>> 
>> 
>> Is there a way to determine in perl whether the current script was run from
>> a login shell or not?
>> 
>> - B
>> 
>> 
> 
> that depends what you mean by "login shell". You can use $ENV{SHELL}
> to find out what shell, if any, invoked the the current process. You
> can also test if the program has been invoked interactively:
> 
> if ( -t STDIN && STDOUT) {
>    we're probably interactive
> }
> 
> That will return false if the job is being run via cron, but it will
> also return false if there is command line redirection.
> 
> The Perl Cookbook has a slightly more complex example in recipe 15.2:
> 
> use POSIX qw/getpgrp tcgetpgrp/;
> 
> sub am_I_intereactive {
>    my $tty;
>    open($tty, "<", "/dev/tty")
>       or die "can't open /dev/tty: $!";
>    my $tpgrp = tcgetpgrp(fileno($tty));
>    my $pgrp = getpgrp();
>    close $tty;
>    return ($tpgrp == $pgrp);
> }
> 
> This will tell you if you have control of a tty, which means the
> program was probably invoked from an interactive session, even with
> redirection in place.
> 
> What none of this will tell you is whether this is a "login" shell.
> Just because a shell is interactive, that doesn't mean it's a login
> shell. a user can change his/her shell at the command line by typing
> /bin/shell, or using su. In order to really be sure that you were in a
> login shell, you would need to check for interactivity, and then check
> that the parent of the shell that invoked perl was the appropriate
> daemon on your system. And then just for good measure, you'd probably
> want to check the result against the contents of /etc/shell or the
> equivalent on your system to make sure that the shell is a valid login
> shell, and then against the contents of /etc/passwd or equivalent to
> make sure that it is the specified login shell for the current user.
> 
> HTH,
> 
> -- jay
> --------------------------------------------------
> This email and attachment(s): [ x ] blogable; [  ] ask first; [  ]
> private and confidential
> 
> daggerquill [at] gmail [dot] com
> http://www.tuaw.com  http://www.dpguru.com  http://www.engatiki.org



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to