複数の開発者のテスト環境を同期する簡単なスクリプトがあります。 mysqlダンプを取得してSSHを介してハッシュを確認し、変更が発生した場合は、ダンプを新しい環境に移動してダンプをキャンセルするよりも複雑ではありません。
機密情報を隠すために書き直しましたが、これまでに書いたスクリプトの要旨は次のとおりです。
#!/bin/bash
mysqldump -h localhost testDB > dbPath/testdb.sql
hash1=$(md5sum dbPath/testdb.sql) | awk '{print $1}'
echo $hash1
スクリプトを実行するとき:
sudo ./testScript.sh
-rw-r--r--1 rootで生成されたmysqldumpが正しいように見えますが、スクリプトがmd5ハッシュに進み、次のような結果が表示されます。
./testScript.sh: line 5: dbPath/testdb.sql: Permission denied
スクリプトではなくシェルで md5sum コマンドを実行すると、sudo を持たない一般ユーザーでも正常に動作します。ルートに切り替えてシェルからコマンドを実行すると、正常に動作します。私のユーザーアカウントでは、私のユーザーアカウントでsudoingやrootで直接実行するなど、任意のIDでスクリプトを実行すると、md5sum行に権限拒否エラーが表示されます。
私のユーザーアカウントの権限がrootの権限を使用するのではなく、どこかでオーバーフローしていると思います。ただし、rootが権限拒否エラーなしでrootのシェルでスクリプトを実行できないことを除いて、私が知っている限り、rootは拒否してはいけません。何でも許します。テストでmd5sumコマンドの前後にwhoamiを追加しましたが、どちらのコマンドもsudoまたはrootで実行するとユーザーとしてrootが出力されます。
rootと私のユーザーアカウントの両方にファイルをmd5sumする権限があるようです。これがスクリプトで実行されるという事実は、私またはルートのコマンド実行またはファイル操作能力を変更しますか?
環境はRHEL 6です。
答え1
基本的な問題は、次の行の解析エラーです。
hash1=$(md5sum dbPath/testdb.sql) | awk '{print $1}'
ほぼ確実に
hash1=$(md5sum dbPath/testdb.sql | awk '{print $1}')
これらのエラーは以下で確認できます。https://shellcheck.net