我有一个简单的脚本,它接受命令来启动、停止、重新启动并返回游戏服务器 (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
&