Почему это происходит, если оператор не работает в Bourne Shell? - PullRequest
1 голос
/ 04 февраля 2010

Я изучаю сценарии оболочки, но не могу разобраться с этой ошибкой, любая помощь очень ценится.

#!/bin/sh
LOCATION=/tmp/loc
PROXY=http://wwwproxy.unimelb.edu.au:8000

http_proxy=$PROXY; export http_proxy
echo "Installing into" $LOCATION

if [ ! -d $LOCATION ]; then mkdir $LOCATION; fi
if [ ! -d $LOCATION/packages ]; then mkdir $LOCATION/packages; fi

TOMCAT_FILE=apache-tomcat-6.0.24.tar.gz
if [ ! -e $LOCATION/packages/$TOMCAT_FILE ]; then
    echo "Downloading" $TOMCAT_FILE
    wget http://mirror.olnevhost.net/pub/apache/tomcat/tomcat-6/v6.0.24/bin/apache-tomcat-6.0.24.tar.gz -O $LOCATION/packages/$TOMCAT_FILE
else
    echo "Found" $TOMCAT_FILE
fi

Похоже, что в третьем операторе if ошибка с ошибкой:

bash-3.00$ ./install.sh 
Installing into /tmp/loc
./install.sh: test: argument expected

(И для тех, кто думает, что они лучше знают, как это сделать, нет, мне действительно нужно написать сценарий, чтобы позаботиться об этом из-за внешних требований)

Ответы [ 3 ]

2 голосов
/ 04 февраля 2010

, если ваш sh не имеет псевдонима bash, вы можете попробовать изменить shebang на #!/bin/bash

2 голосов
/ 04 февраля 2010

Другой способ записи

if [ ! -d $LOCATION ]; then mkdir $LOCATION; fi

- это

[ -d $LOCATION ] || mkdir $LOCATION
2 голосов
/ 04 февраля 2010

Я предполагаю, что ваш /bin/sh не указывает на оболочку Bourne-Again, так как скрипт работает для других людей (см. Комментарии к вашему вопросу).

Для Борна шебанг должен быть /bin/bash-попустим сценарии оболочки, но /bin/sh будет работать в некоторых дистрибутивах (например, Debian), которые имеют символическую ссылку /bin/sh -> /bin/bash.

...