diff --git a/vcsh b/vcsh
index bd0eca1ef635c2c847143d27e3f406f211604dc6..f222fff8abf02f08905180a4d63b0020415969ec 100755
--- a/vcsh
+++ b/vcsh
@@ -214,7 +214,7 @@ rename() {
 run() {
 	hook pre-run
 	use
-	$VCSH_EXTERNAL_COMMAND
+	"$@"
 	hook post-run
 }
 
@@ -304,7 +304,7 @@ elif [ "$1" = 'delete' ]           ||
 	export VCSH_REPO_NAME="$2"
 	export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
 	[ "$VCSH_COMMAND" = 'rename' ]         && export GIT_DIR_NEW="$VCSH_REPO_D/$3.git"
-	[ "$VCSH_COMMAND" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$*"
+	[ "$VCSH_COMMAND" = 'run' ] && shift 2
 	[ "$VCSH_COMMAND" = 'write-gitignore' ]
 elif [ "$1" = 'list' ] ||
      [ "$1" = 'list-tracked' ]; then
@@ -315,7 +315,7 @@ elif [ -n "$2" ]; then
 	export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
 	[ -d $GIT_DIR ] || { help; exit 1; }
 	shift 1
-	export VCSH_EXTERNAL_COMMAND="git $*"
+	set -- "git" "$@"
 elif [ -n "$1" ]; then
 	export VCSH_COMMAND='enter'
 	export VCSH_REPO_NAME="$1"
@@ -349,6 +349,6 @@ done
 verbose "$VCSH_COMMAND begin"
 export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g')
 hook pre-command
-$VCSH_COMMAND
+$VCSH_COMMAND "$@"
 hook post-command
 verbose "$VCSH_COMMAND end, exiting"