所以我知道这是一个有点复杂的用例,可能没有太多实际应用,所以不幸的是到目前为止我无法找到很多有用的指针。
基本上,我希望有一个仅终端会话,该会话在登录后自动运行 CLI 应用程序,并在退出时经过设定的时间(例如 1 分钟)后不断重新启动该应用程序。在应用程序退出期间,外壳应该可以正常使用。
这是我当前的设置(到目前为止效果很好):
- 我有一个仅终端会话(没有 GUI,在本例中是 linux mint)。
- 登录后,我会自动运行交互式 CLI 应用程序(例如,将其添加到 .bashrc 即可轻松完成)
- 用户退出我的 CLI 应用程序后,他们会回到常规 bash 终端并能够运行命令(正如他们应该的那样)
现在是我到目前为止无法弄清楚的棘手部分:
- 如何在短时间内自动重新启动用户终端中的应用程序,同时在达到超时之前仍保持终端可用?
- 我们可以假设用户不会在 bash 中执行任何可能造成破坏的操作(例如启动其他 shell、退出正在运行的进程或注销)。他们必须能够运行 1-2 个其他快速完成的命令,但除此之外别无其他。
我尝试通过运行一个脚本来完成此任务,该脚本(在循环中)在运行应用程序和运行timeout
应该启动新 bash 的命令之间交替,但无法正确执行。似乎无法使用超时命令启动交互式 bash 会话。因此,这可能是一种可能的方法(欢迎提供正确语法的指针),但任何其他方法或想法也完全没问题。
答案1
我在这里有与庇护所相同的想法考虑这个伪逻辑
answersRoomOneArray = {puzzleOneAnswer, puzzleTwoAnswer ... puzzleNAnswer}
# Room 1 Puzzles
puzzleOne ()
# Function to return a value
return puzzleOneAnswer
# Continue puzzles until Array is Full
...
if arrayCorrectRoomOne {} = answersRoomOne{} then
unlockDoor ()
else
punish ()
fi
您可以在每个房间终端中使用上述格式,并将其arrayCorrect
存储在参与者无法访问的目录中的某个位置,以防他们是智能终端。使用这种模块化方法可以让您不需要“控制器脚本”而无需计时器。如果脚本需要重新启动,则清除屏幕并在punish()
函数中重新启动它。如果您只想在“死亡”之前尝试这么多次,请添加一个计数器来计算punish()
达到的次数,并在 X 次尝试后“杀死”参与者。