2013-07-13 3 views
5

Я использую этот скрипт для резервного копирования старого частного экземпляр PostgreSQL в GMAIL периодически:

#!/bin/bash 
/opt/local/lib/postgresql83/bin/pg_dump maxgests -U postgres | gzip --best -c > $1 && (/opt/local/bin/mutt -s `date "+%d-%m-%Y-%H:%M"` -a $1 $2 < /dev/null) 

В последнее время я получаю это:

./postgres_to_gmail.sh: line 2: $1: ambiguous redirect 

И сценарий больше не работает. Mac OS X 10.6.8.

Может ли кто-нибудь сказать, что случилось, и как его исправить?

Первый аргумент это путь, как /tmp/database.gz

Второй аргумент является электронная почта.

+1

Ну что же $ 1 выглядит? Что-то еще, вы должны указывать ** все ** содержащие путь переменные в ваших сценариях Bash. В противном случае они будут ломаться, когда (а не если *, когда *) они содержат пробелы. –

+0

В стороне, я не думаю, что скобки вокруг последней команды необходимы или полезны. – tripleee

+0

Вы правы, я уточнил значения аргументов. –

ответ

9

$1, по-видимому, пуст.

Как правило, вы должны поместить ваши переменные интерполяции в двойные кавычки почти всегда.

+0

Правильно, спасибо за совет. Cronjob, вызывающий этот скрипт, возвращал плохую ценность. –

+0

Подробное руководство по цитированию см. В разделе [Когда обертывать кавычки вокруг переменной] (http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable). – tripleee

1

абонент не устанавливает аргументы ($ 1 $ 2) вы должны проверить кронтаб или программу, которая вызывает периодически более

$ echo > $1 
bash: $1: ambiguous redirect 
+0

Правильно, cronjob был неуклюжим. –

Смежные вопросы