|
From: | Mike Ayers |
Subject: | Re: How to find out the CVSROOT and location in the repository of a w orking directory |
Date: | Mon, 24 Jun 2002 14:23:56 -0700 |
User-agent: | Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.0) Gecko/20020530 |
Reinstein, Shlomo wrote:
Thanks for the detailed reply! Before this sample script, I actually thought that your idea was bad because every type of shell or operating system has its own way of redirecting the standard error -- but you proved me wrong (or is it Perl that always launches the same type of shell when it runs backticks, and this is why it works?). I really didn't know that this error redirection is uniform in all shells and operating systems. (At least those we use, Linux and Windows with several shells in each.) I was surprised to see that this worked on both "cmd" on Windows, and on "tcsh" and "bash" on Linux.
I don't believe that it will work on tcsh, or any csh for that matter, since csh uses a different syntax to redirect stderr. However, perl uses bourne shells by default for backtick evaluation, so the perl script will catch the stderr of its evaluated expression, even when invoked from a csh. Such redirection (or anything for that matter) is not consistent from shell to shell. Perl explicitly looks for a standard bourne shell (barring that, a shell that supports standard bourne behavior such as bash) when installing in an attempt to get reasonably consistent behavior. However, this becomes problematic on systems like NT. ActivePerl invokes CMD.EXE, whereas the perl.exe installed with Cygwin uses ash (a vanilla bourne shell) - these two behave quite differently. However, if you limit the use of backtiks in Perl to output capture as shown, you will find your scripts pretty darn portable, as CMD.EXE supports bourne style command redirection.
/|/|ike
[Prev in Thread] | Current Thread | [Next in Thread] |