Помогите запустить скрипт .sh - PullRequest
1 голос
/ 27 июля 2011

У меня есть скрипт .sh как

#!/bin/bash

if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Usage: sync.sh DIRECTORY_LOCATION"
    exit 1
fi

DIRECTORY_LOCATION=$1

DEV_INSTANCE_IP=<some ip>

# Update data
scp -pR ${DEV_INSTANCE_IP}:${DIRECTORY_LOCATION}/* ${DIRECTORY_LOCATION}/

Как мне запустить этот скрипт ??

Я пробовал sh sync.sh <path to directory>, но он повторяет строку Usage: sync.sh DIRECTORY_LOCATION.Означает ли это, что он запускается ??

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

Гм, сценарию требуется второй (поддельный = никогда не использованный) аргумент в условии || [ -z "$2" ], если вы удалите эту часть, она должна работать так, как предполагали авторы, независимо от того, что это может быть ;-) По крайней мере,он должен работать так, как вы его назвали, а именно sh sync.sh <path to directory>. И нет, если вы указали только один аргумент в своей версии, он предопределил использование и завершился отменой.Вы также можете просто предоставить второй аргумент (при условии, что вы не перепутаете два, т. Е. Предоставление каталога, так как второй аргумент не поможет ...

2 голосов
/ 27 июля 2011

да, работает, -z флаг означает

-z STRING      True if string is empty.

Если первый аргумент или второй пуст -> выход.

Один из способов получения дополнительной информации - изменить значение shebang на #!/bin/bash -x. Это заставит bash печатать каждую выполняемую строку, включая значение параметров.

1 голос
/ 27 июля 2011

$ 1 в этом скрипте означает, что он ожидает другую запись для DIRECTORY_LOCATION. Итак, вам понадобится:

bash sync.sh имя каталога

Кроме того, вместо использования sh scriptname.sh лучше использовать "chmod + x scriptname.sh".

Надеюсь, это поможет!

...