Hash 使用sed修改行,传递密码散列变量

Hash 使用sed修改行,传递密码散列变量,hash,sed,Hash,Sed,我将用户输入的密码传递给Elasticsearch插件的哈希脚本,从该脚本中,输出将被传递给sed以修改静态身份验证文件。有时脚本失败,我猜是由于散列输出。有没有关于代码的建议来改进这一点并防止它偶尔失败?请注意,SED命令删除原始哈希密码行,然后插入新密码行 stty -echo printf "Please enter a password for the admin user: " read password stty echo printf "\n" chmod +x /usr/shar

我将用户输入的密码传递给Elasticsearch插件的哈希脚本,从该脚本中,输出将被传递给sed以修改静态身份验证文件。有时脚本失败,我猜是由于散列输出。有没有关于代码的建议来改进这一点并防止它偶尔失败?请注意,SED命令删除原始哈希密码行,然后插入新密码行

stty -echo
printf "Please enter a password for the admin user: "
read password
stty echo
printf "\n"
chmod +x /usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh
passwordhash=$(/usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh -p $password)
sed -i '4d' /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml
sed -i "3 a\  \hash: $passwordhash" /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml

您是否测试过此脚本中包含空格和星号的密码值?如果没有,我建议您组合一个简单的测试套件来帮助您调试代码。您可能需要在第7行引用$password的用法,因为您只是在替换文件的第4行,所以我强烈建议您以非常不同的方式使用sed。我会:

trap 'rm $tmp' 0
tmp=$(mktemp)
input=/usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml
sed 3q "$input" > $tmp
echo "  \hash: $passwordhash" >> $tmp
sed 1,4d "$input" >> $tmp
# Some command here to validate $tmp
mv $tmp $input

sed-i
与已知会间歇性失败的脚本一起使用是一场等待发生的灾难。(或者,事实上,这已经发生了!)

脚本是如何偶尔失败的?请直接更新你的问题。谢谢你,我实际上刚刚跳过了所有像这样的特殊角色,但下次会尝试!passwordhash=$(/usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh-p$password)passwordhash=$(sed-e的/[]\/$*。^ |[]/\&/g'