------------------------------------------------ On Wed, 15 Jan 2003 12:55:39 -0500, Mark Goland <[EMAIL PROTECTED]> wrote:
> Hello Perl lovers, > > I am developing a script which runs in TCSH 6.x shell. I have two questions > Remember your script runs in Perl not in the shell, you run the perl interpreter in the shell, and I believe Perl uses whatever shell is default on the system for how to run its "system" calls, aka most likely /bin/sh (which could be pointed to tcsh, but may not). > 1. I need to be able to set an global enviernment variable. The shell has a > build in command setenv which would enable me to do what I need. This is > what I try, > > system("setenv DESTDIR /mnt"); > This is most likely succeeding (assuming the shell accepts it all) but I would imagine the shell is started, the command is run, and the shell is closed. So your subsequent call to the shell will be invoked in a new instance of the environment, without what you set. But it appears there is no reason to use this, at least not in this code segment, see below. > ...but this fails , by hand in works great. Source has the same problme. Any > ideas ??? > > 2. I need to run a few external commands sequantialy. Run one wait on it to > compleate run the others.... a sample command would be > > system("cat cab.??|tar vxz -C ${DESTDIR}"); Here your "${DESTDIR}" is being interpolated to use perl's DESTDIR variable instead of the shell's. Is this what you intended (is it even set, are you running with strict and warnings?) Other than that it should be working I believe. Are you getting an error result? You should check for one by adding an 'or die ("Couldn't tar files: $!")' or some such to the system call, or check the return value ($?). > > In C I would usually fork and waitpid on child, I was wondering if there is > a short trick to this in Perl. ( I know IPC::OpenX returns pid and I can do > a waitpid on it ) . > How do you mean "short trick" ... it seems IPC::OpenX would be the short trick, the normal way will work as you mentioned, to fork, and then waitpid on that child, of course within that fork you are probably still looking at doing a 'system'. 'system' just encapsulates the fork/waitpid process for you, so you don't gain anything by first forking. To maintain the shell's environment if this can't be handled in Perl, you may be able to string commands together in one command to system separated by ;'s like on the command line, but this I am not sure about. HTH a little, Good luck... http://danconia.org -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]