2013-07-13 18 views
5

Używam tego skryptu do tworzenia kopii zapasowych starą prywatną instancję PostgreSQL okresowo 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) 

jak późno Dostaję to:

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

I skrypt już nie działa. Mac OS X 10.6.8.

Czy każdy może powiedzieć, co jest nie tak i jak to naprawić?

Pierwszy argument jest ścieżka, jak /tmp/database.gz

Drugi argument jest e-mail.

+1

Więc co robi $ 1 Przeglądaj jak? Coś innego, musisz zacytować ** wszystkie ** zmienne zawierające ścieżkę w twoich skryptach Bash. W przeciwnym razie zostaną złamane, gdy (nie, jeśli, * gdy *) będą zawierać spacje. –

+0

Nie sądzę, aby nawiasy wokół ostatniego polecenia były potrzebne lub użyteczne. – tripleee

+0

Masz rację, wyjaśniłem wartości argumentów. –

Odpowiedz

9

$1 jest najwyraźniej pusty.

Jako ogólną wskazówkę, należy prawie zawsze umieszczać swoje interpolacje zmiennych w podwójnych cudzysłowach.

+0

Dobrze, dzięki za radę. Cronjob wywołujący ten skrypt zwracał złą wartość. –

+0

Aby uzyskać szczegółowe wskazówki dotyczące cytowania, zobacz [Kiedy zawijać cytaty wokół zmiennej] (http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable). – tripleee

1

rozmówca nie określa argumenty ($ 1 $ 2) należy sprawdzić crontab lub program, który nazywa się okresowo więcej

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

Zgadza się, cronjob był nieporęczny. –

Powiązane problemy