「Windowsでエクスプローラーからフォルダを各種ターミナルで開く」の版間の差分

Notion-MW
Notion-MW
34行目: 34行目:
* Git BashではWindowsの実行ファイルにスラッシュ付きオプションを渡すときはスラッシュを2つにする必要がある。<code>cmd //c</code>や<code>bcdedit //v</code>など。
* Git BashではWindowsの実行ファイルにスラッシュ付きオプションを渡すときはスラッシュを2つにする必要がある。<code>cmd //c</code>や<code>bcdedit //v</code>など。
* printf関数の%qオプションを使うと、文字列を<strong>エスケープされた状態にして</strong>返してくれる。これはshからの呼び出し先の別のshで再びフォルダ名をcdなどの引数として利用したいときに使える。
* printf関数の%qオプションを使うと、文字列を<strong>エスケープされた状態にして</strong>返してくれる。これはshからの呼び出し先の別のshで再びフォルダ名をcdなどの引数として利用したいときに使える。
** shの組み込みコマンドのprintfと、独立実行ファイルである/bin/printfがある。基本的な趣旨としては同一のコマンドだが、組み込みコマンドのほうは入力に<code>&quot;</code>が含まれていない限り結果にも<code>&quot;</code>が使われることはないようで、このおかげで意図しない動作を回避できることがある。今回扱う例に関しては前者が後者の上位互換であるということになる。後者を使っているものはそれでも動いたものである。
** bash(POSIX互換ではない)の組み込みコマンドのprintfと、独立実行ファイル(GNU Coreutilsの一部)である/bin/printfがある。基本的な趣旨としては同一のコマンドだが、組み込みコマンドのほうは入力に<code>&quot;</code>が含まれていない限り結果にも<code>&quot;</code>が使われることはないようで、このおかげで意図しない動作を回避できることがある。今回扱う例に関しては前者が後者の上位互換であるということになる。後者を使っているものはそれでも動いたものである。
** そもそも%qは組み込みコマンドのほうにしかないという話もある。環境によって違いそう。
** そもそも%qは組み込みコマンドのほうにしかないという話もある。環境によって違いそう。
* <code>\\?\</code>が付くような長いパスをカレントディレクトリにしていても、Git Bash/Cygwinに付属の(というかMSYS/Cygwin向けにコンパイルされた?)exeなら実行できる。
* <code>\\?\</code>が付くような長いパスをカレントディレクトリにしていても、Git Bash/Cygwinに付属の(というかMSYS/Cygwin向けにコンパイルされた?)exeなら実行できる。
* Git Bashの(ba)shは<code>&#45;&#45;login</code>をつけて起動してもカレントディレクトリが維持されるが、Cygwinの(ba)shは<code>&#45;&#45;login</code>をつけると強制的にホームディレクトリに移動する。
* Git Bashの(ba)shは<code>&#45;&#45;login</code>をつけて起動してもカレントディレクトリが維持されるが、<s>Cygwinの(ba)shは</s><s><code>&#45;&#45;login</code></s><s>をつけると強制的にホームディレクトリに移動する。</s>
** 2024/4頃、Cygwinの挙動が変化し、カレントディレクトリが維持されるようになっていることに気付く。変わっていた方のバージョンは3.5.3、変わっていない方は3.3.6であった。
** ところで、[https://superuser.com/questions/345964/start-bash-shell-cygwin-with-correct-path-without-changing-directory Start bash shell (cygwin) with correct path without changing directory &#45; Super User]の通り、<code>CHERE_INVOKING</code>という変数を1に設定しておけばカレントディレクトリは維持される。
* Git Bashにおいては環境変数を正しく設定するため<code>&#45;&#45;login</code>の時点で環境変数<code>MSYSTEM</code>を<code>MINGW64</code>にしておく必要がある。[[Windowsでのターミナル環境|Windowsでのターミナル環境]] 参照。
* Git Bashにおいては環境変数を正しく設定するため<code>&#45;&#45;login</code>の時点で環境変数<code>MSYSTEM</code>を<code>MINGW64</code>にしておく必要がある。[[Windowsでのターミナル環境|Windowsでのターミナル環境]] 参照。