如何在不使用Expect命令的情况下从Shell脚本提供密码

时间:2020-05-17 11:10:05

标签: bash postgresql shell

我正在编写bash脚本以停止启动我的postgres DB服务。最初,我成功创建了一个,但是一旦启用SSL证书,它就会提示输入短语密码。

我知道最简单的解决方案是使用Expect,但是在我的环境中,我无权使用它。

在没有用户干预的情况下如何提供PEM PHRASE密码的过程中,有人可以帮我吗?

这是我到目前为止的工作。

-bash-4.2$ cat start_postgres_db.sh

cd `dirname $0`

. `dirname $0`/parameter.env

${POSTGREBIN}/pg_ctl -D ${POSTGREDATAPATH} start -w

while true

do

sleep 1

loopcnt=0

loopcnt=`expr ${loopcnt} + 1`

PRCCNT=`ps -ef | grep ${DBEXENAME} | grep -v grep|wc -l`

if [ ${PRCCNT} -eq 1 ]

then

        echo "PostgreSQL process started sucessfully"

        exit
fi

if [ ${loopcnt} -gt 11 ]

then

    echo "PostgreSQL process not started successfully"

    echo "su to postgres and run ${POSTGREBIN}/pg_ctl -D ${POSTGREDATAPATH} restart"

    exit
fi

done

执行:

bash-4.2$ ./start_postgres_db.sh

waiting for server to start....Enter PEM pass phrase:.........

1 个答案:

答案 0 :(得分:0)

您可以使用选项pg_ctl在命令行中将-P的密码作为参数提供。我假设它包含在变量${POSTGREPASSWORD}中。

start_postgres_db.sh

cd `dirname $0`
. `dirname $0`/parameter.env

${POSTGREBIN}/pg_ctl start -w -D ${POSTGREDATAPATH} -P ${POSTGREPASSWORD}

while true; do

  sleep 1
  (( loopcnt++ ))

  PRCCNT=$(ps -ef | grep ${DBEXENAME} | grep -v grep | wc -l)

  if [ ${PRCCNT} -eq 1 ]; then
    echo "PostgreSQL process started sucessfully"
    exit 0
  fi

  if [ ${loopcnt} -gt 11 ]; then
    echo "PostgreSQL process not started successfully"
    echo "su to postgres and run ${POSTGREBIN}/pg_ctl -D ${POSTGREDATAPATH} restart"
    exit 1
  fi

done
相关问题