[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Commands executed with $($prog) do not run properly
From: |
Pierre Gaston |
Subject: |
Re: Commands executed with $($prog) do not run properly |
Date: |
Mon, 8 Nov 2010 09:14:42 +0200 |
On Sat, Nov 6, 2010 at 6:12 AM, <hgb@hgbhome.net> wrote:
> Configuration Information [Automatically generated, do not change]:
> Machine: i486
> OS: linux-gnu
> Compiler: gcc
> Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='i486'
> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i486-pc-linux-gnu'
> -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL
> -DHAVE_CONFIG_H -I. -I../bash -I../bash/include -I../bash/lib -g -O2
> -Wall
> uname output: Linux main.hgbhome.net 2.6.18-4-686 #1 SMP Wed May 9 23:03:12
> UTC 2007 i686 GNU/Linux
> Machine Type: i486-pc-linux-gnu
>
> Bash Version: 3.2
> Patch Level: 39
> Release Status: release
>
> Description:
>
> Hi,
>
> if a program ist started with $($prog) the output is different from <command>
> or even $(<command>). Example with find (excluding a directory from search):
>
> $ ls -l /test
> total 16
> drwxrwxr-x 2 hgb hgb 4096 Nov 6 02:14 a
> drwxrwxr-x 2 hgb hgb 4096 Nov 6 02:14 b
> drwxrwxr-x 2 hgb hgb 4096 Nov 6 02:14 c
> drwxrwxr-x 2 hgb hgb 4096 Nov 6 02:14 d
> $ find /test -type d ! -wholename "/test"
> /test/c
> /test/b
> /test/d
> /test/a
> $ echo "$(find /test -type d ! -wholename "/test")"
> /test/c
> /test/b
> /test/d
> /test/a
> $ prog='find /test -type d ! -wholename "/test"'
> $ echo $prog
> find /test -type d ! -wholename "/test"
> $ echo "$($prog)"
> /test
> /test/c
> /test/b
> /test/d
> /test/a
> $
>
> As seen above /test ist shown when $prog is executed.
>
> I see the same behavior with
> GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) (CentOS)
> GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) (debian)
>
>
> I understand that the above looks crazy and not like a problem out of real
> life
> .... I had to use find to crawl through a huge tree and remove only a few
> files
> in it. I came across the above problem when feeding an array with the output
> of
> find; I fixed it for now by removing the unwanted entries from the output
> array.
>
> Thanks in advance for looking into this.
>
> Regards
> -- hgb
>
>
>
>
your problem is there:
$ prog='find /test -type d ! -wholename "/test"'
The quotes around " " are quoted, they are not special to the shell
anymore, only the literal, non quoted quotes
are special to the shell.
When you later execute $prog, the " " are not removed, they are no
more special than the other literal chars.
check this http://mywiki.wooledge.org/BashFAQ/050