From b64cb98dadf52ea3e1c8739c388b66f104d06ec5 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 23 Dec 2014 10:39:18 +0400 Subject: [PATCH] =?UTF-8?q?impl=C3=A9menter=20=5Frval(),=20pour=20corriger?= =?UTF-8?q?=20un=20bug=20avec=20le=20listage=20de=20fichiers=20avec=20des?= =?UTF-8?q?=20espaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/.ulibver | 2 +- lib/ulib/base | 3 ++- lib/ulib/base.core | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/ulib/.ulibver b/lib/ulib/.ulibver index 3225c55..784ef02 100644 --- a/lib/ulib/.ulibver +++ b/lib/ulib/.ulibver @@ -1 +1 @@ -007011000 +007012000 diff --git a/lib/ulib/base b/lib/ulib/base index 4eb887b..2298d52 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -1304,7 +1304,8 @@ function __la_cmd() { local arg local cmd="/bin/ls -1d" for arg in "$@"; do - cmd="$cmd $(quote_arg "$arg")" + arg="$(_rval "$arg")" + cmd="$cmd $arg" done cmd="$cmd 2>/dev/null" echo "$cmd" diff --git a/lib/ulib/base.core b/lib/ulib/base.core index 1a6bb0f..593e38f 100644 --- a/lib/ulib/base.core +++ b/lib/ulib/base.core @@ -29,6 +29,23 @@ function recho_() { echo -n "$@" fi } +function _rval() { +# Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \`, SPACE par +# \SPACE +# Cela permet de quoter une chaine à afficher telle quelle, sans guillemets, e.g +# eval "echo $(_rval "$value")" +# Note: la protection de ! n'est pas effectuée, parce que le comportement du +# shell est incohérent entre le shell interactif et les scripts. Pour une +# version plus robuste, il est nécessaire d'utiliser un programme externe tel +# que sed ou awk + local s="$*" + s="${s//\\/\\\\}" + s="${s//\"/\\\"}" + s="${s//\$/\\\$}" + s="${s//\`/\\\`}" + s="${s// /\\ }" + recho_ "$s" +} function _qval() { # Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \` # Cela permet de quoter une chaine à mettre entre guillements.