【发布时间】:2015-04-04 08:49:11
【问题描述】:
请注意,虽然这篇文章询问的是 coffeescript.cmd,但我认为答案与它没有任何关系,但更多的是因为我误解了 powershell 的工作系统。
所以要编译和观看coffeescript,我可以调用
> coffee.cmd -cw ./scripts
这将启动咖啡脚本进程。由于w watch 标志,进程将保持打开状态并重新编译任何更改,直到我 Ctrl+c。
我想要启动这个过程,但让它在后台运行,这样我就可以继续使用我的控制台(是的,我知道我可以有多个控制台)。理想情况下,该作业的任何输出都会在发生时被推送到我的控制台。
所以我认为我可以做到这一点
> start-job { coffee.cmd -cw .\scripts }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 BackgroundJob Running True localhost coffee.cmd -cw .\scripts
不幸的是,a) 吞下所有输出,更重要的是 b) 立即完成,而不是一直盯着我的目录
W:\surge\ogre> 找工作
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 BackgroundJob Completed False localhost coffee.cmd -cw .\scripts
请注意,我知道 this post,但正如我所证明的那样,即使我 Recieve-Job,我似乎也无法让工作保持开放。
发生了什么事?工作不是解决这个问题的正确工具吗?启动在后台等待的进程的正确方法是什么?如何将输出从它重定向到我的控制台。
【问题讨论】:
-
什么版本的 Powershell?
-
@Eris 4.0 就我而言。我想
Start-Job是在3中才引入的吧? -
可能找不到coffee.cmd。如果您在开始工作后执行
Get-Job|Receive-Job,您将一无所获? -
@MickyBalladelli
start-job { Get-Command coffee.cmd } | receive-job -Wait工作 -
Powershell 3 引入了分离会话,当父会话关闭时,Powershell 2 会终止所有后台作业。
标签: powershell