我有一个简单的脚本,用于为几个开发人员同步测试环境。它不仅需要进行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--创建的mysqldump 1根根对我来说是正确的,但是,由于脚本继续执行md5哈希,我得到了:
./testScript.sh: line 5: dbPath/testdb.sql: Permission denied
当我从外壳程序(不在脚本中)执行md5sum命令时,即使没有使用sudo的普通用户也可以正常运行。当我更改为root并从shell执行命令时,它可以正常工作。当我以任何身份(从我的用户帐户,从我的用户帐户通过sudo或直接从root用户)运行脚本时,在md5sum行上出现权限被拒绝的错误。
我认为我的用户帐户的权限正在流失,而不是使用root的权限,除了以下事实:脚本无法在没有得到权限拒绝错误的情况下从root用户的shell中以root身份执行,据我所知, root不应拒绝任何权限。作为测试,我在md5sum命令之前和之后抛出了一个whoami,当使用sudo或root执行时,两个命令都以root用户身份输出。
根目录和我的用户帐户显然都具有在文件上执行md5sum的权限;从脚本运行的事实如何改变了我或root的执行命令或操纵文件的能力?
环境是RHEL 6。
根本的问题是这一行的解析错误:
hash1=$(md5sum dbPath/testdb.sql) | awk '{print $1}'
几乎可以肯定的是
hash1=$(md5sum dbPath/testdb.sql | awk '{print $1}')
您可以在https://shellcheck.net上检查类似的错误
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句