Что не так с этим сценарием оболочки C? - PullRequest
2 голосов
/ 11 сентября 2010

Я пытаюсь написать эквивалентный сценарий оболочки C для скрипта bash , упомянутого здесь .

Вот что у меня есть:

#! /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" myemail@myserver.com
endif

и это ошибка, которую я получаю

$ ./scr
if: Badly formed number.
$

На этой странице упоминается, что "Числа в C-оболочке должны быть целыми числами", поэтому я попытался

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

но я все еще получаю ту же ошибку.

1 Ответ

3 голосов
/ 11 сентября 2010

Я сократил ваш сценарий до этого:

#! /bin/tcsh

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

Это дает ту же ошибку. Я думаю, что виновником является

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

Что должен делать -n? Я думаю, что он хочет номер, но получает что-то еще ...

Обновление : -n в bash означает «длина строки не равна нулю». В моей версии tcsh его так же легко заменить, как использовать == "", например:

if (( ! -f "./cache" ) || ("`find ./monme -newer ./cache`" != ""))
then
    touch cache -t "$now"
    echo "new files added" | mail -s "new build" myemail@myserver.com
endif

Попробуйте и посмотрите, работает ли он.

...