Both pureline 'duration_segment' and vscode 'shell integration' install a DEBUG trap to enhance the shell experience
But both work by sourcing a script, and by default the DEBUG trap is not inherited in that case.
Solution 1 (rejected)
We could tell the user to add those lines in its .bashrc :
if [[ $(trap -p DEBUG) =~ ^trap ]]; then
set -o functrace # same as 'set -T'
fi
... but this may have side-effects since it does MUCH MORE than what we wants :
set -o functrace
set -T
If set, any traps on DEBUG and RETURN are inherited by shell functions,
command substitutions, and commands executed in a subshell environment.
The DEBUG and RETURN traps are normally not inherited in such cases.
Thus this solution is rejected.
Solution 2 (adopted)
In Bash 4+, the value of PS0 is expanded and displayed by interactive shells after reading a command and before the command is executed.
PS0 is not evaluated for empty commands, which leaves a blank line.
We can use "Arithmetic expansion" to run __timer_start=$(timer_now) inside PS0 :
It runs in the current shell instead of a sub-shell and can assign to variables.
It also produces output, which we consume with ${0:0:$((...,0))} to output nothing.
Thus the solution is to replace the DEBUG trap with this line:
Both pureline 'duration_segment' and vscode 'shell integration' install a DEBUG trap to enhance the shell experience But both work by sourcing a script, and by default the DEBUG trap is not inherited in that case.
Solution 1 (rejected)
We could tell the user to add those lines in its .bashrc :
... but this may have side-effects since it does MUCH MORE than what we wants :
Thus this solution is rejected.
Solution 2 (adopted)
In Bash 4+, the value of PS0 is expanded and displayed by interactive shells after reading a command and before the command is executed. PS0 is not evaluated for empty commands, which leaves a blank line.
We can use "Arithmetic expansion" to run
__timer_start=$(timer_now)
inside PS0 :${0:0:$((...,0))}
to output nothing.Thus the solution is to replace the DEBUG trap with this line: