2014-10-07 12 views
0

Если я запустил pub serve от PS, он правильно начинает прослушивать 8080, и я могу подключиться из своего браузера.Как Start-Job не совпадает с выполнением моей команды?

PS M:\Coding\Games\dart_games> pub serve 
Loading source assets... (0.2s) 
Serving dart_games web on http://localhost:8080 
Build completed successfully 

Однако, если я пытаюсь запустить его как Job, это не похоже на работу:

PS M:\Coding\Games\dart_games> Start-Job { pub serve } 

Id  Name   PSJobTypeName State   HasMoreData  Location    Command 
--  ----   ------------- -----   -----------  --------    ------- 
4  Job4   BackgroundJob Running  True   localhost    pub serve 

PS M:\Coding\Games\dart_games> iwr http://localhost:8080/ 
iwr : Unable to connect to the remote server 
At line:1 char:1 
+ iwr http://localhost:8080/ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: 
     (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], 
     WebException 
    + FullyQualifiedErrorId : WebCmdletWebResponseException, 
     Microsoft.PowerShell.Commands.InvokeWebRequestCommand 

ответ

3

Pass в нужный каталог с помощью -ArgumentList параметра:

Start-Job {param($path) cd $path; pub serve } -Arg $pwd 

Помните, что задание выполняется в новом процессе PowerShell, поэтому переменные в текущем процессе не отображаются автоматически, а встроенные функции, такие как $ pwd, могут быть разными. -ArgumentList позволяет передавать любые значения, необходимые для работы.

+0

А, это чище, чем у меня было! :) –

1

мне удалось получить выходные данные с помощью Get-Job 4 | Receive-Job. Он сказал, что pubspec.yaml не найден. Это означает, что он работает в неправильной папке!

Мне удалось заставить его работать, передав текущую папку; хотя это немного неуклюжий. Я не могу найти лучший способ :(

Start-Job -InputObject $pwd { CD $input; pub serve } 

Я обернутый эти слегка, чтобы сделать это немного проще в использовании (с pubstart и pubstop)

Function Start-Pub 
{ 
    Start-Job { param($path) cd $path; pub serve } -Arg $pwd 
    & "M:\Apps\Dart\Dartium\chrome.exe" --user-data-dir="M:\Apps\Dart\DartiumProfile" "http://localhost:8080/" 
} 

Function Stop-Pub 
{ 
    Get-Job -State Running | ? Location -eq localhost | ? Command -like "*pub serve*" | Stop-Job 
} 

Set-Alias pubstart Start-Pub 
Set-Alias pubstop Stop-Pub 

Это не несложный (остановит все Пабы, когда вы называете pubstop), но достаточно хорошие

Смежные вопросы