32

Start-Jobコマンドに作業ディレクトリを指定する方法はありますか?

使用事例:

私はディレクトリにいて、編集のためにEmacsを使用してファイルを開きたいです。これを直接行うと、Emacsを閉じるまでPowerShellがブロックされます。しかし、Start-Jobを使用すると、ホームディレクトリからEmacsを実行しようとするため、Emacsに必要なファイルではなく新しいファイルを開かせます。

$ pwdを使用してフルパスを指定しようとしましたが、スクリプトブロック内の変数は、Start-Jobコンテキストで実行されるまで解決されません。したがって、シェルコンテキストで変数を強制的に解決する方法も、これに対する許容可能な答えになります。

完全を期すために、これが私が試したことです。

Start-Job { emacs RandomFile.txt }
Start-Job { emacs "$pwd/RandomFile.txt" }
4

6 に答える 6

35

一部の男の投稿のコメントセクションからの素晴らしい解決策があります。コメンターは、Initパラメータを使用してスクリプト ブロックの作業ディレクトリを設定することを提案しています。

function start-jobhere([scriptblock]$block) {
    Start-Job -Init ([ScriptBlock]::Create("Set-Location '$pwd'")) -Script $block
}
于 2013-06-30T09:32:29.517 に答える
16

考えられる解決策は、「キッカー スクリプト」を作成することです。

Start-Job -filepath .\emacs.ps1 -ArgumentList $workingdir, "RandomFile.txt"

スクリプトは次のようになります。

Set-Location $args[0]
emacs $args[1]

お役に立てれば。

于 2010-02-11T18:08:08.990 に答える
7

これを試して

Start-Job -inputobject $pwd -scriptblock { emacs "$input/RandomFile.txt" }

パラメータ$inputの値を内部的に取る事前​​定義された変数を次に示します。-inputobject

于 2010-11-20T06:19:34.477 に答える
5

Start-Jobは、必要なもの(バックグラウンドでコマンドを実行する)にとってはやり過ぎです。代わりにStart-Processを使用してください。

Start-Process -NoNewWindow emacs RandomFile.txt

このアプローチでは、現在のディレクトリに問題はありません。これをできるだけ簡単にする関数も作成しました。

function bg() {Start-Process -NoNewWindow @args}

そして、呼び出しは次のようになります。

bg emacs RandomFile.txt

これはWindows7(Powershell v2)で機能します。

于 2012-12-05T17:25:30.670 に答える
2

完全を期すために、フィルバートの回答であるコミュニティウィキスタイルに基づいて実装した最終的なスクリプトを次に示します。

function Start-Emacs ( [string]$file )
{
    Start-Job -ArgumentList "$pwd\$file" { emacs $args[0] }
}
于 2010-02-17T18:51:05.657 に答える