设置要执行的脚本路径变量时出现 Bash 脚本错误

问题描述 投票:0回答:1

我有以下脚本:

#!/bin/bash

#Path where all the files will be executed

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done

SCRIPT_PATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )"/..

# Printing functions
black='\E[30;40m'
red='\E[31;40m'
green='\E[32;40m'
yellow='\E[33;40m'
blue='\E[34;40m'
magenta='\E[35;40m'
cyan='\E[36;40m'
white='\E[37;40m'


cecho ()                     # Color-echo.
                             # Argument $1 = message
                             # Argument $2 = color
{
local default_msg="No message passed."
                             # Doesn't really need to be a local variable.

message=${1:-$default_msg}   # Defaults to default message.
color=${2:-$black}           # Defaults to black, if not specified.

  echo -e "$color"
  echo "$message"
  tput sgr0                      # Reset to normal.

  return
}

cecho "Setting Up Piwik" $magenta
cecho "Configuring piwik database settings" $cyan

read -p "Instert a password for piwik's database: " PIWIK_MYSQL_ROOT_PASSWORD

cecho "Configuring Email settings for reports." $cyan



#Create .data folder with piwik required stuff
if [ ! -f  ${SCRIPT_PATH} ]; then
 mkdir -p ${SCRIPT_PATH}
fi

read  -p "Instert smtp host: " MAIL_HOST
read -p "Insert smtp port: " MAIL_PORT
read -p "Insert your email username: " MAIL_USER
read -p "Insert your email password: " MAIL_PASS

cat > ${SCRIPT_PATH}/ssmtp.conf << EOF
UseTLS=Yes
UseSTARTTLS=Yes
root=${MAIL_USER}
mailhub=${MAIL_HOST}:${MAIL_PORT}
hostname=${MAIL_HOST}
AuthUser=${MAIL_USER}
AuthPass=${MAIL_PASS}
EOF

echo "www-data:${MAIL_USER}:${MAIL_HOST}:${MAIL_PORT}" >> ${SCRIPT_PATH}/revaliases

cecho "Setting up wordpress" $magenta

cecho "Setting up wordpress' database settings" $magenta

read -p "Insert a password for database ROOT user: " WORDPRESS_MYSQL_ROOT_PASSWORD
read -p "Insert a username for a NEW database user that wordpresss will use for connection: " WORDPRESS_MYSQL_USER
read -p "Insert a password for the user created above: " WORDPRESS_MYSQL_PASSWORD

COMMAND="env PIWIK_MYSQL_ROOT_PASSWORD=${PIWIK_MYSQL_ROOT_PASSWORD} WORDPRESS_MYSQL_ROOT_PASSWORD=${WORDPRESS_MYSQL_ROOT_PASSWORD} WORDPRESS_MYSQL_USER=${WORDPRESS_MYSQL_USER} WORDPRESS_MYSQL_PASSWORD=${WORDPRESS_MYSQL_PASSWORD} docker-compose" > $SCRIPT_PATH/start.sh

touch "${SCRIPT_PATH}/start.sh"
STARTUP_SCRIPT_PATH= "${SCRIPT_PATH}/start.sh"

touch "${SCRIPT_PATH}/stop.sh"
STOP_SCRIPT_PATH= "${SCRIPT_PATH}/stop.sh"

echo $COMMAND." up -d" > ${STARTUP_SCRIPT_PATH}
chmod u+x ${STARTUP_SCRIPT_PATH}

cecho "Startup script generated" $green

echo $COMMAND." stop " > ${STOP_SCRIPT_PATH}
chmod u+x ${STOP_SCRIPT_PATH}

cecho "Stop script generated" $green

echo "In order to starrt up the service run: "
cecho ${STARTUP_SCRIPT_PATH} $green

echo "You can stop the services via:"
cecho ${STOP_SCRIPT_PATH} $green

在执行时我有这些错误消息:

./scripts/install2.sh: line 84: /home/pcmagas/Kwdikas/Docker/ellakcy/scripts/../start.sh: Permission denied
./scripts/install2.sh: line 87: /home/pcmagas/Kwdikas/Docker/ellakcy/scripts/../stop.sh: Permission denied
./scripts/install2.sh: line 89: ${STARTUP_SCRIPT_PATH}: ambiguous redirect
chmod: missing operand after 'u+x'
Try 'chmod --help' for more information.

Startup script generated
./scripts/install2.sh: line 94: ${STOP_SCRIPT_PATH}: ambiguous redirect
chmod: missing operand after 'u+x'
Try 'chmod --help' for more information.

错误的根源是这些脚本行:

touch "${SCRIPT_PATH}/start.sh"
STARTUP_SCRIPT_PATH= "${SCRIPT_PATH}/start.sh"

touch "${SCRIPT_PATH}/stop.sh"
STOP_SCRIPT_PATH= "${SCRIPT_PATH}/stop.sh"

我想要/尝试做的是我的脚本,通过给定一些参数来自动生成脚本,以便启动和停止一些 docker 容器服务。

但不知何故,这个计划现在对我来说适得其反。接下来我可以尝试什么?

bash
1个回答
1
投票

需要

sudo
获得编写脚本文件的权限,并且变量名和值之间有空格;
=
标志周围不得有任何空格:

sudo touch "${SCRIPT_PATH}/start.sh"
STARTUP_SCRIPT_PATH="${SCRIPT_PATH}/start.sh"  # Note no spaces ..PATH="${..

sudo touch "${SCRIPT_PATH}/stop.sh"
STOP_SCRIPT_PATH="${SCRIPT_PATH}/stop.sh" # Again here.
© www.soinside.com 2019 - 2024. All rights reserved.