On Tue, 17 Jan 2012 15:09:22 +0000, David Edmondson <dme@dme.org> wrote: > On Tue, 17 Jan 2012 18:49:36 +0400, Dmitry Kurochkin <dmitry.kurochkin@gmail.com> wrote: > > > + # We cannot call 'test_emacs' in a subshell, because > > > + # the setting of EMACS_SERVER would not persist > > > + # throughout a sequence of tests, so we use a > > > + # temporary file. > > > + tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi > > > + output="$tmp/test_emacs_output.$$" > > > + test_emacs "$1" > "${output}" > > > + result=$(cat "${output}") > > > + rm -f "${output}" > > > > I wonder if there is any bash trick which can help here? > > I'm not aware of one, but I'm not a bash expert. No shell trick possible there. > > > Another option is to start emacs server before using test_emacs in > > subshell. See emacs-subject-to-filename for an example. I think this > > is a better option than using a temporary file. > > I think that's a very poor option. Forcing knowledge the breakage into > all of the users may make applying any future fix more difficult. The alternative would be to replace emacsclient --socket-name="$EMACS_SERVER" --eval "(progn $@)" with something like: case $1 in --stdout-to-output) shift output=$(emacsclient --socket-name="$EMACS_SERVER" --eval "(progn $@)") return esac emacsclient --socket-name="$EMACS_SERVER" --eval "(progn $@)" Tomi