これは私にナッツを運転しています。助けてくれてありがとう!
$MYSQLDUMP --login-path=$Host $DATABASE > "$BACKUP_DIR/${Host}__${DATABASE}__${NOW}.sql";
$MYSQLDUMP
(スクリプト内)に有効な完全パスがあることを確認しました$NOW
はスクリプトの早い段階で設定されており、ここでは設定されていません...そのため、時間は私たちにも何にも変わりませんdos2unix
を試しました。私はMacを使っていますが、ちょっと...>
のように\>
をエスケープしようとしましたが、代わりにmysqldump: Couldn't find table: ">"
エラーが生成されましたこれは私を夢中にさせています。ここで何が欠けているのかわかりませんか?私たちは出力を指示しているだけであり、それは私が見落としている途方もなく明白なものだと感じています。
[〜#〜]更新[〜#〜]
ここにデバッグおよび支援するテストをいくつか追加しました。
vrb "\$BACKUP_DIR: $BACKUP_DIR"
vrb "whoami $(whoami)"
vrb "ls -ld \"$BACKUP_DIR/\" $(ls -ld \"$BACKUP_DIR/\")"
vrb "absolute path of user's home dir: $(cd ~/; pwd)"
vrb "absolute path of \$BACKUP_DIR: $(cd $BACKUP_DIR/; pwd)"
...プロデュース...
20160713T210808Z: $BACKUP_DIR: ~/www/__MYSQL/backup
20160713T210808Z: whoami william
ls: "~/www/__MYSQL/backup/": No such file or directory
20160713T210808Z: ls -ld "~/www/__MYSQL/backup/"
20160713T210808Z: absolute path of user's home dir: /Users/william
./mygration.sh: line 383: cd: ~/www/__MYSQL/backup/: No such file or directory
20160713T210808Z: absolute path of $BACKUP_DIR: >> ERROR: 1
vrb
は、スクリプトの詳細な出力を処理するもう1つの関数なので、心配する必要はありません。デバッグ情報を出力するためだけのものです。
同じ端末のコンテンツを手動で~/www/__MYSQL/backup/
にリストすると、次のようになります。
$ ls -la ~/www/__MYSQL/backup/
total 0
drwxr-xr-x 2 william staff 68 Jul 13 20:55 .
drwxr-xr-x 6 william staff 204 Jul 13 20:55 ..
それは奇妙だ。 Bashにはほとんどアクセスできないようですが、私の通常のユーザー(そもそもbashスクリプトを実行しているユーザー)はアクセスできます。
別の更新
echo $(whoami);
echo ~;
exit;
...プロデュース...
william
/Users/william
問題は、チルダを二重引用符で囲んでいることです。これを行うと、notがホームディレクトリのパスに展開されます。
検討してください:
MacBook-Pro:~ error$ cat x.sh
#!/bin/sh
echo ~
echo "~"
ls ~
ls "~"
MacBook-Pro:~ error$ ./x.sh
/Users/error
~
Calibre Library Downloads Music bin
Desktop Library Pictures synergy
Documents Movies Public x.sh
ls: ~: No such file or directory
MacBook-Pro:~ error$
二重引用符を引き続き使用する場合は、$HOME
チルダの代わりに変数。
MacBook-Pro:~ error$ echo $HOME
/Users/error
MacBook-Pro:~ error$ echo "$HOME"
/Users/error
MacBook-Pro:~ error$