![从 bash 运行游戏服务器而无需等待输入](https://linux22.com/image/851756/%E4%BB%8E%20bash%20%E8%BF%90%E8%A1%8C%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%80%8C%E6%97%A0%E9%9C%80%E7%AD%89%E5%BE%85%E8%BE%93%E5%85%A5.png)
我有一个简单的脚本,它接受命令来启动、停止、重新启动并返回游戏服务器 (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
&