All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Biggers <ebiggers@kernel.org>
To: Luis Henriques <lhenriques@suse.de>
Cc: fstests@vger.kernel.org
Subject: Re: [PATCH] generic/581: remove extra escape character from awk line
Date: Wed, 22 Nov 2023 15:16:48 -0800	[thread overview]
Message-ID: <20231122231648.GA1541@sol.localdomain> (raw)
In-Reply-To: <ZV40XOGNJdru13XE@suse.de>

On Wed, Nov 22, 2023 at 05:03:24PM +0000, Luis Henriques wrote:
> Checking the keys in /proc/key-users is buggy, as there's an extra '\'
> character: in '{print \$4}' the '$4' shouldn't be escaped otherwise the
> 'awk' command will fail.  This has passed unnoticed because the output
> is sent to '_user_do' function and the result assigned to a variable.
> 
> While there, replace 'awk' by $AWK_PROG.
> 
> Signed-off-by: Luis Henriques <lhenriques@suse.de>
> ---
>  tests/generic/581 | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Hi!
> 
> Please note that I'm not an 'awk' expert and I may be wrong!  But if I do
> see an error if I run something like:
> 
> $ awk '/^[[:space:]]*1000:/{print \$4}' /proc/key-users 
> awk: cmd. line:1: /^[[:space:]]*1000:/{print \$4}
> awk: cmd. line:1:                            ^ backslash not last character on line
> 
> But maybe this depends on the awk implementation, although I've tried a few.
> 
> diff --git a/tests/generic/581 b/tests/generic/581
> index cabc7e1c69ab..1a4b571d40ce 100755
> --- a/tests/generic/581
> +++ b/tests/generic/581
> @@ -92,7 +92,7 @@ while grep -E -q '^[0-9a-f]+ [^ ]*i[^ ]*' /proc/keys; do
>  done
>  
>  # Set the user key quota to the fsgqa user's current number of keys plus 5.
> -orig_keys=$(_user_do "awk '/^[[:space:]]*$(id -u fsgqa):/{print \$4}' /proc/key-users | cut -d/ -f1")
> +orig_keys=$(_user_do "$AWK_PROG '/^[[:space:]]*$(id -u fsgqa):/{print $4}' /proc/key-users | cut -d/ -f1")

The backslash is needed to prevent $4 from being expanded by bash, because the
whole pipeline with 'awk' and 'cut' is in a double-quoted string:

    "awk '/^[[:space:]]*$(id -u fsgqa):/{print \$4}' /proc/key-users | cut -d/ -f1"

Without escaping the $, bash would replace $4 with the empty string while it's
doing expansions on the whole double-quoted string.

- Eric

  reply	other threads:[~2023-11-22 23:16 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-22 17:03 [PATCH] generic/581: remove extra escape character from awk line Luis Henriques
2023-11-22 23:16 ` Eric Biggers [this message]
2023-11-23 11:46   ` Luís Henriques
2023-11-28 14:16     ` Luis Henriques
2023-11-28 17:37       ` Eric Biggers
2023-11-28 18:25         ` Luis Henriques
2023-12-05 17:28           ` Luis Henriques

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231122231648.GA1541@sol.localdomain \
    --to=ebiggers@kernel.org \
    --cc=fstests@vger.kernel.org \
    --cc=lhenriques@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.