小编jth*_*man的帖子

用bash捕获交互式程序的输出和输入

我正在努力使bash中的交互式命令行Java程序自动化,以验证该程序为输入产生了正确的输出(基本上是bash中的穷人单元测试)。

例如,如果我有一个Java程序要求用户输入其全名,然后仅输出其名字,则它应如下所示:

Enter your name: John Doe
John
Run Code Online (Sandbox Code Playgroud)

用户输入“ John Doe”的位置。

运行此命令的简单bash命令如下所示:

OUTPUT=`echo "John Doe" | java NameReader`
Run Code Online (Sandbox Code Playgroud)

要么

OUTPUT=`java NameReader <<< "John Doe"`
Run Code Online (Sandbox Code Playgroud)

两者的麻烦在于$ OUTPUT现在包含以下内容:

Enter your name: John
Run Code Online (Sandbox Code Playgroud)

因为发送到stdin的文本(及其伴随的换行符)不会像我们在控制台中看到的那样在程序的输出中复制。

理想情况下,$ OUTPUT将包含以下内容:

Enter your name: John Doe
John
Run Code Online (Sandbox Code Playgroud)

但是我可以忍受这个:

Enter your name: 
John
Run Code Online (Sandbox Code Playgroud)

(输入被完全省略,但是输出如预期的那样在新行中)

bash中是否有一种方法(不更改底层的Java程序)来获取被输送到stdin的文本,也可以在Java程序读取的“时间”将其输送到stdout,因此捕获了完整的交互式会话?

(另一个注意事项:一些搜索表明spawn / expect命令可能会有所帮助,但是将在其上运行的系统似乎没有可用的命令)

linux bash shell

5
推荐指数
2
解决办法
1380
查看次数

调用FIRApp.configure()后未配置iOS Firebase应用程序

我有一个iOS(Swift)应用程序,AppDelegate中包含以下代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  FIRApp.configure()
  FIRDatabase.database().persistenceEnabled = true
  return true
}
Run Code Online (Sandbox Code Playgroud)

该应用程序崩溃persistenceEnabled = true,有异常FIRAppNotConfigured和消息"Failed to get default FIRDatabase instance. Must call FIRApp.configure() before using FIRDatabase."

显然,我之前已经打过电话FIRApp.configure(),所以建议的解决方案是不正确的.日志输出甚至显示"Configuring the default app"何时调用.

可能是什么问题,我如何解决它,以便我可以使用FIRDatabase?

ios firebase firebase-realtime-database

2
推荐指数
1
解决办法
1777
查看次数

标签 统计

bash ×1

firebase ×1

firebase-realtime-database ×1

ios ×1

linux ×1

shell ×1