aboutsummaryrefslogtreecommitdiff
path: root/bash/bashrc.d
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-07-05 12:38:39 +1200
committerTom Ryder <tom@sanctum.geek.nz>2017-07-05 12:38:39 +1200
commitfd2b6fd3bbe4919a1d4560e788fc66db742c0c6d (patch)
tree3af06eef22a07bb19f60499cbf00812509afd43d /bash/bashrc.d
parent15167871f9fa429ca68bd1c058d86f49ba1ccb4a (diff)
downloaddotfiles-fd2b6fd3bbe4919a1d4560e788fc66db742c0c6d.tar.gz
dotfiles-fd2b6fd3bbe4919a1d4560e788fc66db742c0c6d.zip
Escape backslashes in command prompt output
To stop them getting interpreted as \h, \w etc. None of these *should* be able to emit backslashes (it's an illegal branch name), but best to be thorough.
Diffstat (limited to 'bash/bashrc.d')
-rw-r--r--bash/bashrc.d/prompt.bash14
1 files changed, 10 insertions, 4 deletions
diff --git a/bash/bashrc.d/prompt.bash b/bash/bashrc.d/prompt.bash
index 782af287..a6506a60 100644
--- a/bash/bashrc.d/prompt.bash
+++ b/bash/bashrc.d/prompt.bash
@@ -167,7 +167,10 @@ prompt() {
# Print the status in brackets; add a git: prefix only if there
# might be another VCS prompt (because PROMPT_VCS is set)
printf '(%s%s%s%s)' \
- "${PROMPT_VCS:+git:}" "$name" "${proc:+:"$proc"}" "$state"
+ "${PROMPT_VCS:+git:}" \
+ "${name//\\/\\\\}" \
+ "${proc:+:"${proc//\\/\\\\}"}" \
+ "${state//\\/\\\\}"
;;
# Subversion prompt function
@@ -193,6 +196,7 @@ prompt() {
branch=${branch#/}
branch=${branch#branches/}
branch=${branch%%/*}
+ [[ -n $branch ]] || branch=unknown
# Parse the output of svn status to determine working copy state
local symbol
@@ -210,7 +214,9 @@ prompt() {
((untracked)) && state=${state}'?'
# Print the state in brackets with an svn: prefix
- printf '(svn:%s%s)' "${branch:-unknown}" "$state"
+ printf '(svn:%s%s)' \
+ "${branch//\\/\\\\}" \
+ "${state//\\/\\\\}"
;;
# VCS wrapper prompt function; print the first relevant prompt, if any
@@ -224,7 +230,7 @@ prompt() {
# Show return status of previous command in angle brackets, if not zero
ret)
# shellcheck disable=SC2154
- ((ret)) && printf '<%u>' "$ret"
+ ((ret)) && printf '<%u>' "${ret//\\/\\\\}"
;;
# Show the count of background jobs in curly brackets, if not zero
@@ -233,7 +239,7 @@ prompt() {
while read -r ; do
((jobc++))
done < <(jobs -p)
- ((jobc)) && printf '{%u}' "$jobc"
+ ((jobc)) && printf '{%u}' "${jobc//\\/\\\\}"
;;
# No argument given, print prompt strings and vars