CmdでWSLbashを実行しています。私はそれを何にも使用していません。WSLシステムを存続させるためにそこにぶら下がっているだけです。
Xアプリケーションを起動すると:
bash -c "DISPLAY=:0 xmessage hello &"
私はこの結果を得る:
コマンドウィンドウを問題なく閉じることができますが、かなり面倒です。
毎回このcmdウィンドウを取得せずにコマンドを実行するにはどうすればよいですか?
これがより単純なソリューションであり、[〜#〜] wsh [〜#〜 ] ベースのヘルパースクリプト、ただし:
wscript .\runHidden.vbs bash -c "DISPLAY=:0 xmessage 'hello, world'"
@davv独自のバックグラウンド起動手法を適用して、毎回新しいbash
インスタンスが作成されないようにするには:
1回限りのアクション(例:起動時):非表示のオープンのままbash
を起動します窓。これにより、2bash
プロセスが生成されます:コンソールウィンドウを所有するWindowsbash.exe
プロセス、およびWSL bash
プロセス( WSL init
singleton)が所有し、その後、バックグラウンドコマンドのサービスに使用できます。
wscript .\runHidden.vbs bash # hidden helper instance for servicing background commands
すべてのXウィンドウ起動コマンド:各コマンドを&
で終了してくださいinvokingbash
インスタンスを存続させずに、非表示のWSL bash
インスタンス非同期によって実行されます。
wscript .\runHidden.vbs bash -c "DISPLAY=:0 xmessage 'hello, world' &"
runHidden.vbs
ソースコード:' Simple command-line help.
select case WScript.Arguments(0)
case "-?", "/?", "-h", "--help"
WScript.echo "Usage: runHidden executable [...]" & vbNewLine & vbNewLine & "Runs the specified command hidden (without a visible window)."
WScript.Quit(0)
end select
' Separate the arguments into the executable name
' and a single string containing all arguments.
exe = WScript.Arguments(0)
sep = ""
for i = 1 to WScript.Arguments.Count -1
' Enclose arguments in "..." to preserve their original partitioning.
args = args & sep & """" & WScript.Arguments(i) & """"
sep = " "
next
' Execute the command with its window *hidden* (0)
WScript.CreateObject("Shell.Application").ShellExecute exe, args, "", "open", 0
GUIアプリから起動した場合でも(で呼び出されたRun
ダイアログを介してなど) Win+R)、これはコンソールウィンドウを表示しません。
デフォルトで.vbs
を使用してwscript.exe
スクリプトを実行するようにシステムを構成している場合(wscript //h:wscript /s
)、runHidden.vbs
を直接呼び出すことができ、それを%PATH%
、ファイル名(ルート)のみ:runHidden ...
。
スクリプトの使用はconsoleアプリケーションに限定されないことに注意してください。GUIアプリケーションでさえ、スクリプトを使用して非表示で実行できます。
別の簡単な解決策がありますが、外部実行可能ファイルが必要です。依存関係はなく、 GitHubでのaseering によって推奨されました。
run.exeを介してbashを起動できます:run.exe bash.exe -c "<whatever Linuxcommand>"。 (run.exeはここから入手できます: http://www.straightrunning.com/projectrun/ 、必ず64ビットバージョンをダウンロードしてください。32ビットバージョンは検索できません。 bashを実行します)。
検索パスにrun
があれば、
run bash -c "DISPLAY=:0 xmessage hello"
だから私は今のところこの回避策を作った。私はこれよりも良い方法があることを本当に望んでいますが、ここにそれがあります:
純粋にWSLを存続させるために存在するコマンドプロンプトで、次のスクリプトを実行しています。
wsl_run_server
#!/bin/bash
set -e
nc -kl 127.0.0.1 15150 | sh
そして、バックグラウンドでコマンドを実行するための次のコマンドがあります。
wsl_run_background_command
if ! pidof -x bin/wsl_run_server; then
echo wsl_run_server isnt running!
exit 1
fi
echo \($@\) \& | nc localhost 15150
それから私が呼ぶ窓から:
bash -c "DISPLAY=:0 ~/bin/wsl_run_command xmessage hello"