From 4069af9cd0a0c2d0996b604edef42a008ec2c56b Mon Sep 17 00:00:00 2001 From: Peter Toth Date: Fri, 21 Jun 2024 01:04:08 +0400 Subject: [PATCH] Fix stashing aliases with a space in double quotes --- lib/varstash | 1 + tests/varstash-alias.t | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/varstash b/lib/varstash index 056233c..7e7d201 100644 --- a/lib/varstash +++ b/lib/varstash @@ -108,6 +108,7 @@ function stash() { local alias_def="$(eval alias $stash_which 2>/dev/null)" if [[ -n $alias_def ]]; then alias_def=${alias_def#alias } + alias_def=$(echo "$alias_def" | sed 's/"/\\&/g') # Escape double quotes eval "__varstash_alias__$stash_name=\"$alias_def\"" local stashed=1 fi diff --git a/tests/varstash-alias.t b/tests/varstash-alias.t index 87a765f..f5093db 100644 --- a/tests/varstash-alias.t +++ b/tests/varstash-alias.t @@ -13,9 +13,9 @@ Setup test environment. Aliases should be stashed. - $ alias some_alias="echo ORIG_ALIAS" + $ alias some_alias='echo "ORIG ALIAS"' $ some_alias - ORIG_ALIAS + ORIG ALIAS $ cd . ENTER $ some_alias @@ -23,13 +23,13 @@ Aliases should be stashed. $ cd .. LEAVE $ some_alias - ORIG_ALIAS + ORIG ALIAS Aliases should be stashed, if there are also environment variables. $ some_alias=ENV_VAR $ some_alias - ORIG_ALIAS + ORIG ALIAS $ cd sub ENTER $ type -w some_alias