emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] Re: [Babel] Debugging shell code that misbehaves


From: Sébastien Vauban
Subject: [Orgmode] Re: [Babel] Debugging shell code that misbehaves
Date: Mon, 18 Oct 2010 23:38:59 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (windows-nt)

Hi Dan,

Dan Davison wrote:
> Sébastien Vauban writes:
>
>> #+TITLE:     Debugging shell code that misbehaves
>> #+DATE:      2010-10-14
>> #+LANGUAGE:  en_US
>>
>> * Use case
>>
>> Let's say that:
>>
>> - This file is in =~/Client/Spec=
>> - I'm working on such a chunk of code:
>>
>> #+begin_src sh :results output :exports results
>> grep indAllocType ../Ontology/champs.csv |\
>> iconv -f LATIN1 -t UTF8 |\
>> tr "[]" "|" | cut -d "|" -f 2 | cut -d " " -f 2- |\
>> sed 's%, %\n%g'
>> #+end_src
>>
>> and that, when executing it, I've got an error with not enough context for me
>> to understand what's the problem is.
>>
>> Sneak preview: under Cygwin, the =to= language (of the =iconv= command) must
>> be =UTF-8= in the above case (with a dash).
>>
>> * Debug it
>>
>> So, in order to debug, I decide to add a =session= argument:
>>
>> #+begin_src sh :results output :exports results :session sva
>> grep indAllocType ../Ontology/champs.csv |\
>> iconv -f LATIN1 -t UTF8 |\
>> tr "[]" "|" | cut -d "|" -f 2 | cut -d " " -f 2- |\
>> sed 's%, %\n%g'
>> #+end_src
>>
>> and, there, something totally different is occurring: =grep= is not finding
>> the file anymore.
>>
>> Why? Because adding the session argument makes the code executed from my 
>> *home
>> directory*, while it was executed from the *document's directory* in the 
>> first
>> place.
>
> This would be a bug. For me (ubuntu), the session does start up in the
> document's directory. Perhaps the emacs shell session behaves differently on
> your operating system (cygwin?)?

How could we proove who's doing that effect?  Do you have an idea for testing
this, and identifying what portion of code (be it Org, Babel or Cygwin) would
need to be fixed or customized?


>> So, this is not the right way to debug... as *conditions do change*.
>
> but should not
>
>>
>> * Solution?
>>
>> What's the right solution for such a case?
>
> Fix the bug. But failing that,

Good...


>> - Putting a full path to the file =champs.csv= (instead of the relative one)
>>   is not OK for me, as all of this is under SVN, and I want this to be
>>   executable on someone's else PC (even if placed somewhere else).
>>
>> - Add an explicit =cd= to the right place, before the commands execute. Not
>>   possible, for the same reason as above.
>
> does it help to use a :dir header argument to specify default-directory
> for the session?

Such a dir spec does not seem to be respected:

#+begin_src sh :results output :exports results :session sva :dir 
/cygdrive/c/home/sva/Projects/Client
grep indAllocType ../Ontology/champs.csv |\
iconv -f LATIN1 -t UTF-8 |\
tr "[]" "|" | cut -d "|" -f 2 | cut -d " " -f 2- |\
sed 's%, %\n%g'
#+end_src

Doing pwd in the session buffer, and I see I'm still in ~ 
(/cygdrive/c/home/sva).

Moreover, no, that would not, as I cannot predict where the file will be
located on my colleagues' machines, except if I could add there a relative
spec such as ":dir ./".

Best regards,
  Seb

-- 
Sébastien Vauban




reply via email to

[Prev in Thread] Current Thread [Next in Thread]