shell 从变量使用sudo bash〈〈EOF

bksxznpy  于 2023-01-17  发布在  Shell
关注(0)|答案(1)|浏览(180)

从变量使用HEREDOC时遇到问题。
我有一个脚本,运行良好,但我想让它基于ISROOT的值条件。如果ISROOT=0,那么sudo -i -u db2 inst 1 bash〈〈EOF不应该被调用,如果ISROOT=1,那么它应该被调用。

#!/bin/bash
set -x
DBNAME="SAMPLE"
ISROOT=1
if [[ $ISROOT == 1 ]]; then
    DB2_PREFIX="sudo -i -u db2inst1 bash '<<' 'EOF' "
    DB2_POSTFIX=" 'EOF' "
  else
    DB2_PREFIX=" "
    DB2_POSTFIX=" "
  fi
  printf '\n\n%s\n\n' "Setting DB2_PREFIX: $DB2_PREFIX and DB2_POSTFIX: $DB2_POSTFIX"
  sleep 5

whoami

OUTPUTFILE=$( echo "XX.wlm.$( date "+%Y%m%d_%H%M%S" )" )
{
sudo -i -u db2inst1 bash << EOF
echo "In"
whoami

db2 connect to $DBNAME
           db2 -v "call WLM_SET_CLIENT_INFO( null, null, null, null, 'SYSDEFAULTADMWORKLOAD' )"

           printf '\n\n%s\n\n' "Current state of queries"

           db2 -v "SELECT current timestamp as timestamp, ACTIVITY_STATE, SUM(ADM_BYPASSED) AS BYPASSED, COUNT(*) AS ACTIVE_CONNS FROM TABLE(MON_GET_ACTIVITY(NULL,-2)) AS T WHERE T.MEMBER = T.COORD_MEMBER GROUP BY ACTIVITY_STATE"

EOF
} 2>&1 | tee $OUTPUTFILE
echo "Out"
whoami

但是,我的要求是仅在ISROOT == 1时使用sudo -i -u db2inst1 bash << EOF
所以我想做这样的事-

#!/bin/bash
set -x
DBNAME="SAMPLE"
ISROOT=1
if [[ $ISROOT == 1 ]]; then
    DB2_PREFIX="sudo -i -u db2inst1 bash '<<' 'EOF' "
    DB2_POSTFIX=" 'EOF' "
  else
    DB2_PREFIX=" "
    DB2_POSTFIX=" "
  fi
  printf '\n\n%s\n\n' "Setting DB2_PREFIX: $DB2_PREFIX and DB2_POSTFIX: $DB2_POSTFIX"
  sleep 5

whoami

OUTPUTFILE=$( echo "XX.wlm.$( date "+%Y%m%d_%H%M%S" )" )
{
$DB2_PREFIX
echo "In"
whoami

db2 connect to $DBNAME
           db2 -v "call WLM_SET_CLIENT_INFO( null, null, null, null, 'SYSDEFAULTADMWORKLOAD' )"

           printf '\n\n%s\n\n' "Current state of queries"

           db2 -v "SELECT current timestamp as timestamp, ACTIVITY_STATE, SUM(ADM_BYPASSED) AS BYPASSED, COUNT(*) AS ACTIVE_CONNS FROM TABLE(MON_GET_ACTIVITY(NULL,-2)) AS T WHERE T.MEMBER = T.COORD_MEMBER GROUP BY ACTIVITY_STATE"

$DB2_POSTFIX
} 2>&1 | tee $OUTPUTFILE
echo "Out"
whoami

这不起作用,并抛出错误:

+ sudo -i -u db2inst1 bash ''\''<<' 'EOF'\'''
bash: '<<: No such file or directory

有人能帮帮忙吗。
我试过将EOF和〈〈放在单引号中,但仍然不起作用。

i34xakig

i34xakig1#

仅当ISROOT == 1时,才使用sudo -i -u db2 inst 1 bash
很好,所以只在那时运行sudo。否则就运行bash。

if ((ISROOT == 1)); then
    cmd=(sudo -i -u db2inst1 bash)
else
    cmd=(bash)
fi
"${cmd[@]}"  << EOF
echo "In"
....
EOF

相关问题