diff options
author | Marc Cornellà <marc.cornella@live.com> | 2019-02-06 11:55:38 +0100 |
---|---|---|
committer | Marc Cornellà <marc.cornella@live.com> | 2019-02-06 11:57:28 +0100 |
commit | 052493b1ba71fe7e13554e57571fe4c793d53c3c (patch) | |
tree | 264a84c5c1a36acd1b30b8d5f5d0a8456d26f697 | |
parent | 851899e59ea71ce8fbae738ec7aeb7a967585977 (diff) | |
download | zsh-052493b1ba71fe7e13554e57571fe4c793d53c3c.tar.gz zsh-052493b1ba71fe7e13554e57571fe4c793d53c3c.tar.bz2 zsh-052493b1ba71fe7e13554e57571fe4c793d53c3c.zip |
z: refresh $RANDOM's value outside subshell
This change references `$RANDOM` outside the subshell to refresh it for the
next subshell invocation. Otherwise, subsequent runs of the function get the
same value and, if run simultaneously, they may clobber each others' temp .z
files.
This is due to how zsh distributes RANDOM values when running inside a
subshell:
subshells that reference RANDOM will result in identical pseudo-random
values unless the value of RANDOM is referenced or seeded in the parent
shell in between subshell invocations
See: http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-RANDOM
-rw-r--r-- | plugins/z/z.sh | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/plugins/z/z.sh b/plugins/z/z.sh index 4fc75dc6a..5fe6d5266 100644 --- a/plugins/z/z.sh +++ b/plugins/z/z.sh @@ -222,10 +222,16 @@ if type compctl >/dev/null 2>&1; then if [ "$_Z_NO_RESOLVE_SYMLINKS" ]; then _z_precmd() { (_z --add "${PWD:a}" &) + # Reference $RANDOM to refresh its value inside the subshell + # Otherwise, multiple runs get the same value + : $RANDOM } else _z_precmd() { (_z --add "${PWD:A}" &) + # Reference $RANDOM to refresh its value inside the subshell + # Otherwise, multiple runs get the same value + : $RANDOM } fi [[ -n "${precmd_functions[(r)_z_precmd]}" ]] || { |