diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh old mode 100644 new mode 100755 index 802ed10ee..618995c63 --- a/plugins/wd/wd.sh +++ b/plugins/wd/wd.sh @@ -183,6 +183,11 @@ wd_add() then wd_remove $point > /dev/null printf "%q:%s\n" "${point}" "${PWD/#$HOME/~}" >> $WD_CONFIG + if (whence sort >/dev/null); then + local config_tmp=$(mktemp "${TMPDIR:-/tmp}/wd.XXXXXXXXXX") + # use 'cat' below to ensure we respect $WD_CONFIG as a symlink + sort -o "${config_tmp}" $WD_CONFIG && cat "${config_tmp}" > $WD_CONFIG && rm "${config_tmp}" + fi wd_export_static_named_directories @@ -342,8 +347,8 @@ wd_clean() { wd_export_static_named_directories() { if [[ -z $WD_SKIP_EXPORT ]] then - grep '^[0-9a-zA-Z_-]\+:' "$WD_CONFIG" | sed -e "s,~,$HOME," -e 's/:/=/' | while read warpdir ; do - hash -d "$warpdir" + command grep '^[0-9a-zA-Z_-]\+:' "$WD_CONFIG" | sed -e "s,~,$HOME," -e 's/:/=/' | while read warpdir ; do + hash -d "$warpdir" done fi } @@ -430,7 +435,10 @@ else break ;; "-r"|"--remove"|"rm") - wd_remove $2 + # Loop over all arguments after "rm", separated by whitespace + for pointname in "${@:2}" ; do + wd_remove $pointname + done break ;; "-l"|"list")