【发布时间】:2014-07-10 03:06:28
【问题描述】:
*决定开始赏金并删除不需要的信息
我想在 SBT 控制台中运行一个脚本,该脚本将在最后运行 SBT 命令。如何做到这一点
我编写了一个脚本,允许我执行 shell 命令。输入sbt 然后path/to/my-script start 给我这个错误:/bin/sh: start command not found
但是path/to/my-script sbt start 工作正常
sbt 插件(例如these)或自定义任务在这种情况下不起作用的原因:
- 脚本不是用 scala 编写的
快速编辑
*我更愿意从脚本执行start,而不是使用自定义任务/命令来运行我的脚本
更多信息如下
我将逐步解释我想做的事情(我正在做的事情对你来说可能听起来很傻,但请阅读我对 Etan 的回复):
-
在我的控制台中输入 sbt 将调用 SBT 控制台
-
我不想输入
start,而是想运行一个脚本,该脚本将执行与项目没有直接关系的其他事情,然后在完成后为我调用start。
对脚本不太熟悉,脚本可以调用#!/bin/sh 命令,所以我想我想做的是调用#!/bin/sh/<*this-sbt-console*> 命令(如果可能的话)
即使我可以让脚本在终端上打印 start 并在完成后调用 enter/return 键,这样的解决方法也足够了
其他信息:
- 不使用任何特定框架
- SBT 版本 = 0.13+
【问题讨论】:
-
您的脚本作为 scala 脚本运行,其参数通过?为什么要在 sbt 提示符下运行它? sbt 不是为您提供了更直接地运行 scala 脚本的方法吗?
-
@EtanReisner 如上所述: 1. 我使用
start作为示例 2. 我也使用那个小的 Scala 脚本作为示例(实际的脚本更长并且在不同的语言) 3. 还有很多事情要做(见 1 和 2) 4. 我想了解更多关于我使用的 Scala 工具的信息,方法是让我的手有点脏 -
sbt 是一个构建工具。是的,它有一个
console任务,它可以让你在REPL 中使用你项目的类路径和你自己的代码中的任何类,但是这与让sbt 执行bash 文件有什么关系呢?我不明白你在这里想要达到什么目的......所以你能扩展吗?顺便说一句,当您使用path/to/my-script sbt start时,sbt 与它无关...... bash 文件使用 2 个参数(“sbt”和“start”)执行 scala REPL。 PS.你的示例代码有错误 -
@giladhoch 如果我在 SBT REPL 中并输入
start,它将运行我的应用程序。有没有办法从脚本中做到这一点?这很奇怪,因为我可以在 REPL 中使用sbt start运行脚本,但即使我已经在 REPL 中,单独使用start也不起作用(请参阅上面的错误) -
我还是不明白。为什么你(认为你)需要 sbt?该脚本执行 Scala REPL,它与 SBT 控制台不同。因此,当您在命令行中键入
path/to/my-script sbt start时,shell 将查看第一个参数 (path/to/my-script) 并在传递其他参数 (sbt&start) 作为参数。当您键入sbt然后path/to/my-script start时,您将调用SBT 控制台,它将path/to/my-script&start作为参数除外。为什么你会期望结果是一样的?