Why is bash not behaving consistently?

Paul Howarth paul at city-fan.org
Fri Aug 12 11:44:55 UTC 2005


Dan Track wrote:
> On 8/12/05, Stephanus Fengler <fengler at uiuc.edu> wrote:
> 
>>Paul Howarth wrote:
>>
>>
>>>Dan Track wrote:
>>>
>>>
>>>>I was writing this little bash script using find and I came along this
>>>>difference from using the same command on the command line and in bash
>>>>script.
>>>>
>>>>Basically on the command line I have to type:
>>>>
>>>>/usr/bin/find /opt/yum/packages/ -mtime +2 -a \( -regex .*.rpm -o
>>>>-regex .*.hdr \) -exec ls -lrt {} \;
>>>>
>>>>whereas , in a bash script I have to type:
>>>>
>>>>/usr/bin/find /opt/yum/packages/ -mtime +2 -a ( -regex .*.rpm -o
>>>>-regex .*.hdr ) -exec ls -lrt {} ;
>>>>
>>>>As you can see I need to escape parenthesis and semi-colons on the
>>>>command line but I don't need to do that in a bash script.
>>>>
>>>>Is there a reason for this?
>>>
>>>
>>>How are you running this script? I would expect the first version to
>>>work on the command-line and in a script, and the second version not
>>>to work at all...
>>>
>>>Paul.
>>>
>>
>>Maybe your standard script interpreter isn't bash but simply sh? You may
>>add
>># /bin/bash
>>
>>as your first line to make sure bash is used.
>>
>>Stephanus
> 
> 
> The script interpreter is /bin/bash.

Can't reproduce this here.

With this script:

#!/bin/bash

/usr/bin/find /var/cache/yum/updates-released/packages/ -mtime +2 -a \( 
-regex .*.rpm -o -regex .*.hdr \) -exec ls -lrt {} \;

I get output:

-rw-r--r--  1 root root 9763596 Aug  1 00:00 
/var/cache/yum/updates-released/packages/evolution-2.2.3-2.fc4.i386.rpm
-rw-r--r--  1 root root 91382 Aug  1 00:00 
/var/cache/yum/updates-released/packages/evolution-devel-2.2.3-2.fc4.i386.rpm



With this script:

#!/bin/bash

/usr/bin/find /var/cache/yum/updates-released/packages/ -mtime +2 -a ( 
-regex .*.rpm -o -regex .*.hdr ) -exec ls -lrt {} ;

I get the expected errors:

./run_yum_clean: line 5: syntax error near unexpected token `('
./run_yum_clean: line 5: `/usr/bin/find 
/var/cache/yum/updates-released/packages/ -mtime +2 -a ( -regex .*.rpm 
-o -regex .*.hdr ) -exec ls -lrt {} ;'



I'd also suggest escaping the asterisks, so in your original script that 
would be:


/usr/bin/find /opt/yum/packages/ -mtime +2 -a \( -regex .\*.rpm -o 
-regex .\*.hdr \) -exec ls -lrt {} \;

What output do you get from this, and what output from your unescaped 
script?

Paul.




More information about the fedora-list mailing list