Sftp経由でファイルをアップロードし、ファイルがリモートサーバーに完全にアップロードされている場合は安全性テストを実行しています。両方(ローカルのファイルとリモートサーバーのファイル)のmd5ハッシュを取得し、それらを照合しています。それらが一致する場合、アップロードは成功したと結論付けます。これがシェルスクリプトのコードの一部です。
ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename' > $HOME_DIR/remote_hash_$datetag.txt
local_hash=$(md5sum $HOME_DIR/$dump | cut -d' ' -f1)
echo "local = $local_hash"
cat $HOME_DIR/remote_hash_$datetag.txt
remote_hash=$(cat $HOME_DIR/remote_hash_$datetag.txt)
echo "remote = $remote_hash"
output:
local = cd8d77f0467754bc0c1c7ac3fb7f6184
dee4a8484f99c577fd70cb8fa01e5995
remote = dee4a8484f99c577fd70cb8fa01e5995
私が直面している問題は、スクリプトを実行するとハッシュが異なるが、コマンドを実行するとssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename' > $HOME_DIR/remote_hash_$datetag.txt
シェルスクリプトから、同じハッシュを取得します。スクリプトで何が間違っていますか?
私が試したこと:ssh $REMOTE_MC 'digest -a md5 $TARGET_DIR/$filename >> $TARGET_DIR/remote.txt'
出力をローカルファイルではなくリモートファイルにリダイレクトしました。リモートファイルには正しいハッシュが含まれています。しかし、ローカルファイルにリダイレクトすると、ハッシュが一致しません。
前もって感謝します。
ssh
コマンドを囲む一重引用符を使用しています。このようにして、変数$TARGET_DIR
および$filename
は、評価される代わりに文字通りに取得されます。変数を評価するには、一重引用符を二重引用符に変更します。
ssh $REMOTE_MC "digest -a md5 $TARGET_DIR/$filename" > $HOME_DIR/remote_hash_$datetag.txt
もう1つの提案は、変数名の境界をより明確にするために、変数を${variable}
のように${datetag}
として記述することです。