chilicuil chilicuil - 4 months ago 21
Bash Question

Dash -x fails with Bad substitution error

I'm trying to learn how to write portable shell scripts, to do so I'm starting to migrating my personal utilities from bash to sh (dash on my system). There is however a error I'm getting in all cases when I try to run the scripts in debugging mode

$ dash -x script


For instance, on this script:

#!/bin/sh
echo hi


If I run it as:
$ dash script
, I get the 'hi' string, however if I run it as:
$ dash -x script
or if I add the
set -x
command before echo:

#!/bin/sh
set -x
echo hi


It fails with the error:


script.sh: 3: script.sh: Bad substitution


this makes very difficult to debug my scripts. I'm running ubuntu 12.04 with dash 0.5.7-2ubuntu2

Answer

Just by the time I finished writing my question I realized I was using a personalized PS4 (which is used in xtrace mode), my PS4 was defined as:

>>(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }

I changed temporarily as PS4=">>" and everything went ok, I can now debug my scripts on dash. Hope this helps someone.