I have some code which evals a configuration file - but before doing so attempts to validate the content. It does this by taking each potential keyword from the file and then doing:
if typeset -p | grep -q "^declare -. ${var}$”; then … to determine whether the keyword in question exists as a declared but unset variable in the script. However, I am seeing cases where the above incorrectly fails, or where executing this line twice in immediate succession will fail on the first invocation and then succeed on the second. This doesn’t happen every time, and appears to be non-deterministic: running the entire script multiple times sometimes results in an earlier failure, sometimes it continues succeeding for many iterations more. Turning on xtrace or adding additional debug logging does appear to prevent the problem from occurring, unfortunately. Sometimes, with much less regularity, the above line actually fails with: <script name>: typeset: write error: Broken pipe The problem I’m hitting may be specific to Ubuntu 14.04 LTS’ bash-4.3.11(1)-release or may only occur within a VM environment - but it looks as if it may be a timing-based issue or a race-condition… although putting a ‘sleep 0.1’ before the typeset call appears to make little or no difference. Additionally, I can’t reproduce this behaviour on bash-4.4. Is this or anything similar a known issue with bash-4.3 which has been specifically fixed (and if so, is there a URL or mailing list entry which documents this?) or is it something which anyone else has ever come across or reported? Failing this, is there any alternative to ‘typeset’ to list a variable declared as local to a function but which has not yet been assigned a value?