「Windowsでのターミナル環境」の版間の差分
Notion-MW |
Notion-MW |
||
(同じ利用者による、間の2版が非表示) | |||
14行目: | 14行目: | ||
前項の目的を達するため、「自身に渡されたコマンドライン引数を(場合により多少の処理をした上で)ほぼそのまま使って他のコマンドを実行する」ようなプログラムを作成した。 | 前項の目的を達するため、「自身に渡されたコマンドライン引数を(場合により多少の処理をした上で)ほぼそのまま使って他のコマンドを実行する」ようなプログラムを作成した。 | ||
[https://github.com/ge9/win-console-delegator https://github.com/ge9/win-console-delegator] | [https://github.com/ge9/win-console-delegator <span>https://github.com/ge9/win-console-delegator</span>] | ||
このプログラムは、「自分自身のファイル名の最後の文字と最後から3番目の文字を<code>t</code>に変更したファイル(主にexe→txtを想定しているが、com→totなどでもよい)を読み込み、その内容と自分に与えられたコマンドライン引数をつなげた文字列をコマンドとして実行する」という挙動をする。すなわち、実行ファイルは(コンパイルし直さず)そのままコピーした上で、ペアとなる.txtファイルに適切な内容を書くことで、以下のようなプログラムが実現できる。 | このプログラムは、「自分自身のファイル名の最後の文字と最後から3番目の文字を<code>t</code>に変更したファイル(主にexe→txtを想定しているが、com→totなどでもよい)を読み込み、その内容と自分に与えられたコマンドライン引数をつなげた文字列をコマンドとして実行する」という挙動をする。すなわち、実行ファイルは(コンパイルし直さず)そのままコピーした上で、ペアとなる.txtファイルに適切な内容を書くことで、以下のようなプログラムが実現できる。 | ||
22行目: | 22行目: | ||
たとえばテキストファイルに以下のように書いておけば、mpvが起動される。<strong>末尾の半角スペースも入れること。</strong> | たとえばテキストファイルに以下のように書いておけば、mpvが起動される。<strong>末尾の半角スペースも入れること。</strong> | ||
<syntaxhighlight lang="vb.net">"C:\Users\username\Softwares\mpv\mpv.exe" </syntaxhighlight> | <syntaxhighlight lang="vb.net">"C:\Users\username\Softwares\mpv\mpv.exe"</syntaxhighlight> | ||
Windows版のmpvは、設定ファイル(mpv.conf)やプラグインなどを自身が存在するディレクトリから読み込むが、それらの動作を維持したままで、.pathにはmpv.exeという呼び出し専用のファイルだけを配置することができる。 | Windows版のmpvは、設定ファイル(mpv.conf)やプラグインなどを自身が存在するディレクトリから読み込むが、それらの動作を維持したままで、.pathにはmpv.exeという呼び出し専用のファイルだけを配置することができる。 | ||
39行目: | 39行目: | ||
上記と若干似ているが、PATHをはじめとした環境変数を変えることでプログラムがうまく実行されるようにしたい、という場合もある。この場合は、テキストファイルを以下のようにすればよい(Git Bashのフォルダをパスに追加し、<code>MYVAR</code>に<code>value1</code>をセットする例)。末尾の半角スペースはあってもなくてもいい。 | 上記と若干似ているが、PATHをはじめとした環境変数を変えることでプログラムがうまく実行されるようにしたい、という場合もある。この場合は、テキストファイルを以下のようにすればよい(Git Bashのフォルダをパスに追加し、<code>MYVAR</code>に<code>value1</code>をセットする例)。末尾の半角スペースはあってもなくてもいい。 | ||
<syntaxhighlight lang="bash">cmd /c path C:\Program Files\Git\usr\bin;%PATH% & set MYVAR=value1 & </syntaxhighlight> | <syntaxhighlight lang="bash">cmd /c path C:\Program Files\Git\usr\bin;%PATH% & set MYVAR=value1 &</syntaxhighlight> | ||
こちらは、先ほどと違って、内部でGit Bashのコマンドを使用する(Git Bashとは無関係な)プログラムを実行する際などに有用である。 | こちらは、先ほどと違って、内部でGit Bashのコマンドを使用する(Git Bashとは無関係な)プログラムを実行する際などに有用である。 | ||
また、これに類似のケースとして、環境変数の設定などを行うバッチファイルが既に用意されていてそれを使いたいという場合もある。例えば以下のようなテキストファイルを用いれば、実質的にVisual Studioの開発者コマンドプロンプト(Developer Command Prompt for VS 2022)の内部で与えられたコマンドを実行してくれるプログラムが作れる。 | また、これに類似のケースとして、環境変数の設定などを行うバッチファイルが既に用意されていてそれを使いたいという場合もある。例えば以下のようなテキストファイルを用いれば、実質的にVisual Studioの開発者コマンドプロンプト(Developer Command Prompt for VS 2022)の内部で与えられたコマンドを実行してくれるプログラムが作れる。 | ||
<syntaxhighlight lang="python">cmd /c | <syntaxhighlight lang="python">cmd /c C:\PROGRA~1\MIB055~1\2022\Community\Common7\Tools\VsDevCmd.bat &</syntaxhighlight> | ||
* ここでも短いパスを使用している。長いパスでも引用符で囲めばある程度うまく動作するが、<code>&</code>の後にくるコマンドに引用符が含まれている場合にうまくいかない。 | |||
Linuxでも、例えば特定のvenv仮想環境の中で与えられたコマンドを実行するシェルスクリプトを全く同じ発想で作ることができる。 | Linuxでも、例えば特定のvenv仮想環境の中で与えられたコマンドを実行するシェルスクリプトを全く同じ発想で作ることができる。 | ||
157行目: | 159行目: | ||
<div style='text-align: center;'>Windows Terminalの見た目</div> | <div style='text-align: center;'>Windows Terminalの見た目</div> | ||
しかし、あまり知られていないようだが、このconhost.exeには「<strong>文字を選択した状態(ウインドウタイトルに「選択」と出る)だと一切の出力がブロックされる</strong>」という仕様があるようである(文字選択を容易にするため?参考: [https://github.com/microsoft/terminal/issues/34 https://github.com/microsoft/terminal/issues/34])。例えば<code>ping -t localhost</code>を実行して文字を選択してみるといいだろう。方向キーや文字を入力するなどして選択状態を解除すると出力は再開する。 | しかし、あまり知られていないようだが、このconhost.exeには「<strong>文字を選択した状態(ウインドウタイトルに「選択」と出る)だと一切の出力がブロックされる</strong>」という仕様があるようである(文字選択を容易にするため?参考: [https://github.com/microsoft/terminal/issues/34 <span>https://github.com/microsoft/terminal/issues/34</span>])。例えば<code>ping -t localhost</code>を実行して文字を選択してみるといいだろう。方向キーや文字を入力するなどして選択状態を解除すると出力は再開する。 | ||
この仕様により、[https://stackoverflow.com/questions/8140804/how-can-i-stop-my-server-from-freezing-when-powershell-is-in-select-mode ruby on rails - how can I stop my server from freezing when powershell is in 'select' mode? - Stack Overflow] などにあるように、サーバーアプリケーションの実行が出力の際に意図せずブロックされるといった問題が起こる(筆者は[[error_private_page|error_private_page]]のサーバーを使っている際にこの問題に気付いた)。また、詳しい条件はわからないが、筆者の経験では、<strong>単にそのコンソールウインドウを長時間使わず放置するだけでも同じ現象が発生する</strong>ことがあり、文字選択をしないように気を付けるだけでは不十分なようである。 | この仕様により、[https://stackoverflow.com/questions/8140804/how-can-i-stop-my-server-from-freezing-when-powershell-is-in-select-mode ruby on rails - how can I stop my server from freezing when powershell is in 'select' mode? - Stack Overflow] などにあるように、サーバーアプリケーションの実行が出力の際に意図せずブロックされるといった問題が起こる(筆者は[[error_private_page|error_private_page]]のサーバーを使っている際にこの問題に気付いた)。また、詳しい条件はわからないが、筆者の経験では、<strong>単にそのコンソールウインドウを長時間使わず放置するだけでも同じ現象が発生する</strong>ことがあり、文字選択をしないように気を付けるだけでは不十分なようである。 | ||
171行目: | 173行目: | ||
[https://chiyosuke.blogspot.com/2018/05/blog-post_7.html ちよぶろ。: コマンドプロンプトの色を変える。] | [https://chiyosuke.blogspot.com/2018/05/blog-post_7.html ちよぶろ。: コマンドプロンプトの色を変える。] | ||
例えば黄色(<code>33</code>)+太字(<code>01</code>)+末尾空白(<code>$S</code>)なら | |||
<syntaxhighlight lang="shell">$E[33;01m$P$E[0m$G$S</syntaxhighlight> | |||
ただしVista以降~Windows 10の途中(1607より前?)ではcmd+conhostという組み合わせ(といっても多分cmdを使うとしたら事実上conhostが必要となる)だとエスケープ文字がそのまま表示されてしまい色がつかない。これは[https://github.com/adoxa/ansicon ansicon]で解決できる。 | ただしVista以降~Windows 10の途中(1607より前?)ではcmd+conhostという組み合わせ(といっても多分cmdを使うとしたら事実上conhostが必要となる)だとエスケープ文字がそのまま表示されてしまい色がつかない。これは[https://github.com/adoxa/ansicon ansicon]で解決できる。 | ||
180行目: | 185行目: | ||
プロファイルを自分で追加できるなどの仕様は、Windowsにしてはなかなか偉い感じがする。 | プロファイルを自分で追加できるなどの仕様は、Windowsにしてはなかなか偉い感じがする。 | ||
フォントは、GUIからではなく設定ファイルを変更する必要はあるが、変えられる。デフォルトのCascadia | フォントは、GUIからではなく設定ファイルを変更する必要はあるが、変えられる。デフォルトのCascadia Codeより<strong>Consolas</strong>のほうが英数字が日本語のちょうど半分のサイズになるので読みやすい。 | ||
<syntaxhighlight style="margin-bottom:0.2em;" lang="vb.net">"defaults": { | <syntaxhighlight style="margin-bottom:0.2em;" lang="vb.net">"defaults": { | ||
189行目: | 194行目: | ||
<div style='text-align: center;'>設定例</div> | <div style='text-align: center;'>設定例</div> | ||
CSSのように複数のフォントを指定することはまだできないようである。[https://github.com/microsoft/terminal/issues/2664 https://github.com/microsoft/terminal/issues/2664] まあこれはしょうがないだろう。 | CSSのように複数のフォントを指定することはまだできないようである。[https://github.com/microsoft/terminal/issues/2664 <span>https://github.com/microsoft/terminal/issues/2664</span>] まあこれはしょうがないだろう。 | ||
==== 太字 ==== | |||
[https://github.com/microsoft/terminal/issues/109 <span>https://github.com/microsoft/terminal/issues/109</span>]の通り、反映されない不具合があった。そこに書いてある通り、Windows Terminalの設定画面から開ける(下部にボタンあり)JSONファイルの”profiles”にある<code>"defaults": {}</code>またはその下の”list”の各プロファイルの中身に<code>"intenseTextStyle": "bold"</code>と書くことで治った。 | |||
<syntaxhighlight lang="javascript">{ | |||
....//省略 | |||
"profiles": | |||
{ | |||
"defaults": { | |||
"intenseTextStyle": "bold" //ここ | |||
}, | |||
"list": | |||
[ | |||
.... | |||
{ | |||
"commandline": "%SystemRoot%\\System32\\cmd.exe", | |||
"font": | |||
{ | |||
"face": "Consolas" | |||
}, | |||
"guid": "{00000000-4444-3333-2222-111111111111}", | |||
"hidden": false, | |||
"name": "name", | |||
"intenseTextStyle": "bold" //またはここ | |||
}, | |||
.... | |||
] | |||
}, | |||
}</syntaxhighlight> | |||
== コマンドライン引数をめぐる仕様 == | == コマンドライン引数をめぐる仕様 == | ||
{{UnderConstruction|Windowsでのターミナル環境}} | {{UnderConstruction|Windowsでのターミナル環境}} | ||
[[Category:IT]][[Category:Windows]]{{#seo:|title={{FULLPAGENAME}} - Turgenev's Wiki}} | [[Category:IT]][[Category:Windows]]{{#seo:|title={{FULLPAGENAME}} - Turgenev's Wiki}} |