JiscMail Logo
Email discussion lists for the UK Education and Research communities

Help for CCP4BB Archives


CCP4BB Archives

CCP4BB Archives


CCP4BB@JISCMAIL.AC.UK


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

CCP4BB Home

CCP4BB Home

CCP4BB  January 2008

CCP4BB January 2008

Options

Subscribe or Unsubscribe

Subscribe or Unsubscribe

Log In

Log In

Get Password

Get Password

Subject:

Re: Perl

From:

Peter Keller <[log in to unmask]>

Reply-To:

Peter Keller <[log in to unmask]>

Date:

Wed, 16 Jan 2008 12:28:42 +0000

Content-Type:

TEXT/PLAIN

Parts/Attachments:

Parts/Attachments

TEXT/PLAIN (149 lines)

Hi all,

On Wed, 16 Jan 2008, Ian Tickle wrote:

> I'm rather surprised that is the complete explanation, for the simple
> reason that Perl (or any program for that matter) already inherits all
> the environment variables from the shell in which it is run, including
> PATH, CINCL, CLIBD_MON etc which would be needed to run pdbset, refmac
> etc.  In fact sourcing ccp4.setup from within Perl in the way suggested
> will be very inefficient if you have several system calls since you
> would have to do it in *every* system call that runs a CCP4 program,
> i.e. the variable settings are not saved from one system call to the
> next.

I don't believe that just doing

    system("source ccp4.setup");

in a Perl script will have any effect: if you check the return status of the 
above "system" function call you will find that it returns an error status. As 
described in the Perl documentation for "system", you can do this easily as 
follows:

    system("source env.test") == 0 or die "system call failed: $?";

This is because when "system" has only one argument, and that argument 
contains no shell metacharacters, that argument is split into words and passed 
to the system call execvp (do "man execvp" for details). execvp requires a 
executable file to run (either a binary, or a script of some type), and 
"source" is not an executable file. It is a builtin command of the shells csh, 
tcsh and bash. There is no executable file or script in /usr/bin or anywhere 
else on your $PATH in a standard Unix-family OS (unless you have put one there 
yourself).

You could force "system" to execute in a shell instead of using execvp by 
including a metacharacter in the argument like this:

    system("source ccp4.setup;");

or use an explicit shell invocation:

    system("/bin/bash -c 'source ccp4.setup'");

As long as ccp4.setup contains no errors, this function will return a 
successful status, but even that will have no effect on your script. The 
"system" function forks a child process to execute its argument. Your script 
will then wait for the child process to terminate before continuing. Modifying 
the environment of a child process will not have any effect on the environment 
of its parent. You could do something like:

    system("source ccp4.setup; pdbset ...");

as Ed suggested, although see below for a portability issue. As Ian points out 
this can get inefficient, and shouldn't be necessary anyway (unless you want 
to use different versions of CCP4 at different places in your script).

> As Ed pointed out you didn't say what the *exact* error message was when
> you tried it the first time (which is always a good idea when reporting
> a problem!).  You said that the CCP4 programs work normally from the
> command line which implies that the environment is correctly set up, so
> the only conclusion I can come to is that you didn't source ccp4.setup
> in the shell that you were running Perl in.  I always do exactly that

I think that Ian is correct here: whether your script works depends on whether 
CCP4 has been set up in the shell where you run your script.

> (in my .login startup script so it's only run once when I login - I use
> tcsh), then just as a check in all my Perl scripts the first line is
> always:
>
> if(!defined($ENV{"CCP4"})){
>  die("You must set up the CCP4 environment.\n");
> }
>
> Also note that your solution won't work anyway if the user's default
> shell is csh or tcsh because the system call in Perl uses sh by default,
> whereas ccp4.setup will normally have been configured to be compatible
> with csh or tcsh.

Not only this, but standard /bin/sh doesn't have a "source" command. It works 
on many Linux distributions because /bin/sh is a link to bash, or otherwise 
has some bash functionality. For portability, you should use the standard 
Bourne-shell "." command:

    system(". ccp4.setup; pdbset ....");

Hope that this makes things clearer,
Peter.

>
> HTH
>
> -- Ian
>
>> -----Original Message-----
>> From: [log in to unmask]
>> [mailto:[log in to unmask]] On Behalf Of
>> [log in to unmask]
>> Sent: 15 January 2008 20:37
>> To: Ed Hoeffner
>> Cc: [log in to unmask]
>> Subject: Re: Perl
>>
>> Hi,
>>
>> thanks for all the help!
>>
>> system ("source ccp4.setup")
>>
>> does the trick, every time before a ccp4 script is called,
>> the environmental
>> parameters have to be set up this way.
>>
>>
>> Quoting Ed Hoeffner <[log in to unmask]>:
>>
>>> Hi
>>>
>>> You don't include any error messages, so it's very difficult to
>>> troubleshoot.
>>>
>>> However, as a wild guess, I'd suggest you ensure that you
>> execute the ccp4
>>> setup file and then try your command. I don't know perl,
>> but the call might
>>> look something like system("source ccp4.setup ; pdbset
>> ..."). As I recall,
>>> there is a ccp4 setup file that has to be loaded first,
>> though you may have
>>> to find it and adjust that part of the command accordingly
>> so the file can
>>> be located.
>>>
>>> Ed
>>>
>>>
>>
>>
>> --
>>
>>
>
>
> Disclaimer
> This communication is confidential and may contain privileged information intended solely for the named addressee(s). It may not be used or disclosed except for the purpose for which it has been sent. If you are not the intended recipient you must not review, use, disclose, copy, distribute or take any action in reliance upon it. If you have received this communication in error, please notify Astex Therapeutics Ltd by emailing [log in to unmask] and destroy all copies of the message and any attached documents.
> Astex Therapeutics Ltd monitors, controls and protects all its messaging traffic in compliance with its corporate email policy. The Company accepts no liability or responsibility for any onward transmission or use of emails and attachments having left the Astex Therapeutics domain.  Unless expressly stated, opinions in this message are those of the individual sender and not of Astex Therapeutics Ltd. The recipient should check this email and any attachments for the presence of computer viruses. Astex Therapeutics Ltd accepts no liability for damage caused by any virus transmitted by this email. E-mail is susceptible to data corruption, interception, unauthorized amendment, and tampering, Astex Therapeutics Ltd only send and receive e-mails on the basis that the Company is not liable for any such alteration or any consequences thereof.
> Astex Therapeutics Ltd., Registered in England at 436 Cambridge Science Park, Cambridge CB4 0QA under number 3751674
>

Top of Message | Previous Page | Permalink

JiscMail Tools


RSS Feeds and Sharing


Advanced Options


Archives

April 2024
March 2024
February 2024
January 2024
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007


JiscMail is a Jisc service.

View our service policies at https://www.jiscmail.ac.uk/policyandsecurity/ and Jisc's privacy policy at https://www.jisc.ac.uk/website/privacy-notice

For help and support help@jisc.ac.uk

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager