Lazer
Lazer

Reputation: 94820

Whats wrong with this C shell script?

I am trying to write a C shell equivalent script for the bash script mentioned here.

This is what I have :

#! /bin/tcsh

set now=`date +%Y%m%d%H%M.%S`
if (( ! -f "./cache" ) || (-n  "`find ./monme -newer ./cache`" ))
then
    touch cache -t "$now"
    echo "new files added" | mail -s "new build" [email protected]
endif

and this is the error I get

$ ./scr
if: Badly formed number.
$

This page mentions that "Numbers in the C-shell must be integers", so I tried

set now=`date +%Y%m%d%H%M`

but I get the same error still.

Upvotes: 2

Views: 2708

Answers (1)

Peter Jaric
Peter Jaric

Reputation: 5302

I cut down your script to this:

#! /bin/tcsh

if ( -n  "`find ./monme -newer ./cache`" ) then
    echo hello
endif

This gives the same error. I think the culprit is

-n  "`find ./monme -newer ./cache`"

What is -n supposed to do? I think it wants a number, but gets something else...

Update: -n in bash means "length of string is non-zero". In my version of tcsh it is as easy to replace as to use == "" like this:

if (( ! -f "./cache" ) || ("`find ./monme -newer ./cache`" != ""))
then
    touch cache -t "$now"
    echo "new files added" | mail -s "new build" [email protected]
endif

Try that and see if it works.

Upvotes: 3

Related Questions