我写了一个小脚本。完成后,它将设置我需要的环境变量并为我启动一个Node服务器。我创建了脚本,以便我有一个命令行界面来在启动时更改环境变量而不必记住。
这就是我到目前为止......
if [ $1 = "d" ] || [ $1 = "default" ]
then
export PORT=80
export ENV=development
export ENDPOINT=development
elif [ $# -eq 0 ]
then
printf "\n\n-------------------\n\nPort Options:\n[1] 80\n[2] 3000\n[3] Custom\n\n-------------------\n\n"
read -p "Select Option: " PORT_OPTION
if [ "$PORT_OPTION" -eq 1 ]
then
REQUESTED_PORT=80
elif [ "$PORT_OPTION" -eq 2 ]
then
REQUESTED_PORT=3000
elif [ "$PORT_OPTION" -eq 3 ]
then
read -p "Enter Requested Port Number: " REQUESTED_PORT
else
echo "Invalid slection...exiting."
exit
fi
if [ "$REQUESTED_PORT" -eq "$REQUESTED_PORT" 2> /dev/null ]
then
if [ "$REQUESTED_PORT" -lt 1024 ] && [ "$(id -u)" != "0" ]
then
echo "Must have Root authoritzation to use this port...exiting."
exit
else
if netstat -an | grep "$REQUESTED_PORT" > /dev/null
then
SERVICE_PIDS_STRING=`lsof -i tcp:$REQUESTED_PORT -t`
OLD_IFS="$IFS"
IFS='
'
SERVICE_PIDS=($SERVICE_PIDS_STRING)
IFS="$OLD_IFS"
printf 'Port is in use by the following service(s)...\n\n-------------------\n\nProcess : PID\n'
for PID in "${SERVICE_PIDS[@]}"
do
PROCESS_NAME=`ps -p $PID -o comm=`
printf "$PROCESS_NAME : $PID\n"
done
printf "\n-------------------\n\nPlease kill the procceses utilizing port $REQUESTED_PORT and run this script again...exiting."
exit
else
echo "NOTHING USING PORT"
fi
fi
else
echo "Invalid port number...exiting."
exit
fi
else
echo "Invalid argument...exiting."
exit
fi
我已经搜索了一段时间,试图找到解决问题的方法。之前的第37行已从read -a SERVICE_PIDS <<< "${SERVICE_PIDS_STRING}"
更改。一切都运作良好,第37行的两个版本都适用于我...除非我将脚本作为sudo运行。
这不会有问题,但系统会保护某些端口,因此有时我需要在脚本上使用sudo。
我使用sudo运行脚本时收到以下错误...
./Start.sh: 36: ./Start.sh: Syntax error: "(" unexpected (expecting "fi")
为什么使用sudo会破坏我的脚本,我该如何解决这个问题呢?
P.S。我更喜欢使用Shell脚本而不是Bash。 (我可能在这里说错了,但我的理解是,如果我使用纯Shell脚本,脚本可以从任何UNIX系统运行,我的伙伴使用Mac。)