diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2017-07-05 12:38:39 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2017-07-05 12:38:39 +1200 |
commit | fd2b6fd3bbe4919a1d4560e788fc66db742c0c6d (patch) | |
tree | 3af06eef22a07bb19f60499cbf00812509afd43d /bash | |
parent | Add dot and slash to legal mftl(1df) target chars (diff) | |
download | dotfiles-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')
-rw-r--r-- | bash/bashrc.d/prompt.bash | 14 |
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 |