从 bash 运行游戏服务器而无需等待输入

从 bash 运行游戏服务器而无需等待输入

我有一个简单的脚本,它接受命令来启动、停止、重新启动并返回游戏服务器 (SA:MP) 的状态。该网站提供了使用此命令的解决方案:

./samp03svr &

一切都运行良好,但是当脚本执行时,它会等待用户输入(按 ENTER),然后继续执行脚本。

我似乎找不到一种方法来让脚本继续执行而不等待任何用户输入。我已经搜索了大约 5 个小时,尝试了至少 20 种不同的方法,包括运行 screen。运行 screen 有效,但不能提供我正在寻找的确切内容。脚本还会立即收集进程 ID,如下所示:

mv ./server_log.txt ./logs/server_$NOW.txt
mv ./mysql_log.txt ./logs/mysql_$NOW.txt
./samp03svr <<< echo &
pid=$!
echo $pid > $pidf
echo -e "The server has been started successfully"

等待 RETURN 时出现的消息是:

Started server on port: 7777, with maxplayers: 30 lanmode is OFF.

该服务器运行64位Ubuntu 12.04。

提前致谢。

答案1

因为 samp03svr 输出的是文本,所以需要将输出重定向为 null

 ./samp03svr > /dev/null 2>&1 &

答案2

您可以在运行服务器之前尝试将newline( ) 字符写入标准输入。\n

这是一个写入“foo”并将其通过管道传输到下一个命令的 std.in 的示例

echo $'foo' | while read x ; do echo $x ; done

所以你的情况你可以

echo $'\n' | ./samp03svr

换行引用示例取自这里

答案3

您能否将该脚本粘贴到某处,或者将脚本中尝试读取 ENTER 键的部分粘贴到某处。

也尝试一下这个,假设它等待换行符:

./samp03svr <<< echo&

相关内容