bug-bash
[Top][All Lists]
Advanced

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

Non-POSIX friendly output from declare -f / typeset -f


From: Raphael Cohn
Subject: Non-POSIX friendly output from declare -f / typeset -f
Date: Tue, 20 Jan 2015 14:09:55 +0000

Hi,

It seems with bash 4.3.30(1)-release (and probably others) that embedded functions are output with a leading 'function ' keyword when using declare -f / typeset -f. This is different to all other shells that support declare / typeset that I've tested (pdksh, mksh, Mac OS X ksh, which I think is AT&T)

For instance, this entered at the shell:-

bye() {
    echo dddd
}

helloworld() {
    echo hello
    embed() {
    echo by
    }
}

Produces this with typeset -f
helloworld ()
{
    echo hello;
    function embed ()
    {
        echo by
    }
}

whereas pdksh, for instance, produces:-

helloworld() {
    echo hello
    embed() {
    echo by
    }
}

The other ksh88 derivatives are very similar apart from indentation, it seems.

Is this by design? It's a little annoying for my situation*, as it makes it impossible to consume the output from declare -f / typeset -f with another POSIX shell (I am cognisant that of course ther emight be other bash syntax in there, eg arrays, but I can code to make sure none is present). If there's no workaround in bash itself, does anyone know a regex I could apply safely to the output to remove the nested 'function ' statements. One that is heredoc aware? Or am I going to have to write a parser (:-( ? Or is there another way?

Many thanks

Raph

PS First posting of any note, so apologies in advance for any breach of etiquette.

* PPS I have a couple of use cases, one of which is running a portion of code under sudo from a generated script in a chroot where bash has not yet been installed. Another is allowing user code additions. Such is life.

reply via email to

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