How to avoid having shell scripts which fail from killing Emacs shell?

Matthias Andree matthias.andree@gmx.de
Tue Jun 23 14:07:00 GMT 2009


David Karr schrieb:
>> -----Original Message-----
>> From: cygwin-owner@cygwin.com [mailto:cygwin-owner@cygwin.com] On Behalf
>> Of Ken Brown
>> Sent: Monday, June 22, 2009 12:54 PM
>> To: cygwin@cygwin.com
>> Subject: Re: How to avoid having shell scripts which fail from killing
>> Emacs shell?
>>
>> On 6/22/2009 3:38 PM, David Karr wrote:
>>>> -----Original Message-----
>>>> From: cygwin-owner@cygwin.com [mailto:cygwin-owner@cygwin.com] On
>> Behalf
>>>> Of Ken Brown
>>>> Sent: Monday, June 22, 2009 12:26 PM
>>>> On 6/22/2009 10:53 AM, David Karr wrote:
>>>>> I've often been annoyed by shell scripts which fail for particular
>>>>> reasons, at which point it causes my Emacs shell buffer to get killed,
>>>>> with "Process shell<2> finished".
>>>> I don't recall ever seeing this happen, but maybe I just don't
>> remember.
>>>>   Can you give me a simple test case?
>>> I'm not sure how complicated it needs to be.  My test case gathers a
>> couple
>>> of parameters and then calls a Java (JDK 1.6.0_14) class.  The class
>> throws
>>> an exception (file not found) in my test case (because I'm deliberately
>>> giving it parameters that will cause that).  If I give it parameters
>> that
>>> will avoid the exception, then it doesn't kill the shell.
>>>
>>> Is that enough information to build a test case with?
>> No.  I don't have JDK installed, and I don't have any idea how it
>> interacts with cygwin processes.  If you can trigger the problem with a
>> simple shell script that doesn't require JDK, I'll see if I can help.
>> Or maybe someone on the list who does have JDK can suggest something for
>> you to try.
> 
> I was able to produce an additional clue by writing a custom class for
> testing this.
> 
> I found that the key is whether the Java class reads from stdin or not.  I
> built a first version that takes a filepath on the command line, and whether
> I get the class to throw an exception or not, it exits the script without
> killing the shell.  However, when I changed the class to also read a line of
> input from stdin, whether the filepath on the command line exists or not
> (i.e., whether the class throws an exception or not), it kills the shell at
> completion of the script.
> 
> So, it has something to do with whether the sub-shell reads stdin or not.  I
> have no idea what that indicates, but I'm sure that must be useful
> information.

Just a few pointers:

Does the problem go away if the java command is enclosed in parentheses, so as
to run it in a sub-shell?

Are you using (perhaps in the emacs configuration somewhere) shell options like
"-e" for the /outer/ shell?

Are you sourcing (". scriptname") rather than executing ("scriptname") your scripts?


HTH

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list