通过.sh脚本将命令传递到命名的屏幕会话

时间:2013-04-25 12:54:43

标签: bash shell

我完全是初学者,我搜索了一些if elseif else教程并开始构建这个脚本。我正在尝试创建一个.sh脚本,它允许我从PHP脚本管理我的Valve sourceserver。这就是我目前所拥有的:

#!/bin/sh
# CONFIG
LOGFILE="/var/www/management/ifacelog"
NEWDATE=`TZ=GMT-3 date +%d.%m.%Y" "%H:%M:%S`
# END OF CONFIG
SCRIPTCOMMAND=$1
CSGOCOMMAND=$2
if [ $SCRIPTCOMMAND = "START" ] ; then
        echo $NEWDATE  "SERVER STARTED! connect cs.kask.fi; password gd | rcon_password tuksu" >> test
        touch lockfile
        screen -A -m -d -S csgo -L /home/csgo/server/srcds_run -game csgo -console -usercon -tickrate 128 +net_public_adr 46.246.93.192 +ip 46.246.93.192 +tv_port 27010 -maxplayers_override 11 +game_type 0 +game_mode 1 +host_worksh$
elif [ $SCRIPTCOMMAND = "RESTART" ] ; then
        echo $NEWDATE  "STOPPING THE SERVER" >> test
        echo $NEWDATE  "Passing command tv_stoprecord and waiting 10sec." >> test
        screen -S csgo -X stuff "tv_stoprecord"
        screen -S csgo -X stuff "
"
sleep 10
        echo $NEWDATE  "Passing command: quit" >> test
        screen -S csgo -X stuff "quit"
        screen -S csgo -X stuff "
"
        echo $NEWDATE  "SERVER RESTARTED!" >> test
elif [ $SCRIPTCOMMAND = "KILL" ]; then
        echo $NEWDATE  "KILLING SERVER!" >> test
        pkill srcds_run
        rm lockfile
        rm screenlog.0
elif [ $SCRIPTCOMMAND = "RCON" ]; then
        echo $NEWDATE  "REMOTE RCON! Passing value: " $2 $3 >> test
        screen -X -S csgo -p 0 stuff $2 $3
        screen -S csgo -X stuff "
"
elif [ $SCRIPTCOMMAND = "RESET" ]; then
        rm lockfile
        rm screenlog.0
else
        echo "UNKNOWN COMMAND WAS PASSED!"
fi

除了将命令传递给屏幕会话本身(如果scriptcommand = RCON),一切正常。如果我输入shell screen -X -S csgo -p 0 stuff say test,它会将其正确传递给屏幕会话。如果我运行我的脚本./csgo.sh RCON say test,则屏幕显示错误-X: stuff: invalid option "say"。我也试过了screen -X -S csgo -p 0 stuff \"$2\",但没有任何区别。

因为如果我手动输入它可以正常工作,我不知道为什么它不适用于脚本。知道为什么它不起作用以及如何解决它?

0 个答案:

没有答案