On Tue, 30 Sep 2025 10:23:39 +1000
David Gibson
On Tue, Sep 30, 2025 at 12:24:17AM +0200, Stefano Brivio wrote:
On Mon, 29 Sep 2025 14:30:14 +0800 Yumei Huang
wrote: Running test pasta/tcp with debug enabled would get stuck with below error:
+ printf 'DEBUG: ns socat -u OPEN:__BASEPATH__/big.bin TCP6:[__GW6__%__IFNAME__]:10003\n' lib/term: line 38: printf: `_': invalid format character
The error occurs because printf interprets the % character as the start of a format specifier, and the following '_' isn't one of them.
Fix it by replacing 'printf "${*}\n"' with 'printf "%s\n" "$*"'.
I'm not sure why, but this breaks colour highlights for me. Instead of seeing a part of this message in blue, now I get:
Test layout: \033[1;34msingle passt instance with guest\033[0m.\n
I can look into it if it only happens for me, or if needed.
Oh, that's interesting. I believe the colouring has been broken forever on Fedora, but I never got around to looking into it. Figuring this out might reveal why. Maybe.
I realised I think I know why: those colour codes rely on turning "\033" into a terminal escape. printf(1) will do that in the format string, but not in %s parameters
$ printf "a\tb%sc\n " "\t" a b\tc
We can fix this either by moving the escape codes back into the format string, or using %b instead of %s, which explicitly interprets string escape codes.
Oh, I didn't know about %b, nice. It's also in POSIX.1-2024, see point 7. here: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/printf.html#tag_2... ...side note for Yumei: the whole test suite _should_ be POSIX shell, that is, it doesn't rely on specific shell (e.g. Bash) implementations. For example, on Debian, Ubuntu, and others, the default shell for non-interactive usage (not what you have on terminal, but what executes scripts) is dash: https://wiki.ubuntu.com/DashAsBinSh https://wiki.archlinux.org/title/Dash So, if it's described in the POSIX specification (the one I just linked) it will almost certainly work everywhere. If not, it might break (but not necessarily). -- Stefano