WSL2のcdコマンドでWindowsパスを許可するにはどうすればよいですか?

WSL2のcdコマンドでWindowsパスを許可するにはどうすればよいですか?

私はcygwinから来たWSL改宗者です。 Cygwinがすることの1つはUnixを受け入れることです。そしてコマンドのWindowsファイルパスcd。もちろん、ほとんどのWindowsパスには\Unixの特殊文字が含まれていますが、それをエスケープする限り、cdWindowsパスへのingは期待どおりに機能しますcd 'C:\Program Files'あなたのものを変えなさいDディレクトリは/cygdrive/c/Program Files1です。

WSLの場合はそうではありません。cd 'C:\Program Files'エラーメッセージを印刷しますcd: no such file or directory: C:\Program Files

私はcygwinの機能が好きです。cdWSLで使用するときに同じ動作を得る方法はありますか?

sudo apt install <x>解決策は、サードパーティツール(例:)のインストール、エイリアスの作成、私のシェルで何かを有効にする、または自分自身のシェルスクリプトを作成するbindなどの形式です。bindkey私がUnixを使用できるようにする限りそしてWindowsパスをcd引数として使用するとうれしいです。


追加情報

私のディストリビューションはUbuntuです。私はzshをメインシェルとして使用しますが、シェルスクリプトはbashで書いています。理想的には、このソリューションは両方に適していますが、これが不可能な場合はzshソリューションを使用したいと思います。

私の質問に答えたい人に役立つ可能性がある次の関連質問を見つけました。Cygwin:CDからWindowsパスに簡単に移動する

WSLを使用しませんが、助けをしたい人はWSLにwslpathこれは公式文書で見つけた最も近いものです。、これは使用法の出力です。

➜  ~ wslpath
wslpath: Invalid argument
Usage:
    -a    force result to absolute path format
    -u    translate from a Windows path to a WSL path (default)
    -w    translate from a WSL path to a Windows path
    -m    translate from a WSL path to a Windows path, with '/' instead of '\'

EX: wslpath 'c:\users'

WSLコマンドラインでWindowsのディレクトリ/ファイルを開くために作成した他のスクリプトでこのコマンドを使用しました。

➜  ~ cat ~/bin/open
#! /bin/bash
set -x

arg="$*"
explorer.exe "$(wslpath -w "$arg")" # take a unix path and open it in Windows

1:cygwinのパスは/cygdrive/c/WSLのパスと同義です/mnt/c

ベストアンサー1

Cygwinは、Windowsライブラリインタフェースの上にUnix / Linuxライブラリインタフェースをエミュレートします。 UnixをWindowsと共存させるには多くの努力が必要です。特に、ファイル名を処理するデフォルトのライブラリ関数では、パスをWindowsパスに変換することがさらに重要です。このコードはCygwinにのみ適用され、ほとんどのUnixファミリープログラムがWindows環境で実行できるように設計されています。したがって、コードがこのようなパスを見つけた場合、それを変換せずに、代わりにc:\somefile現在のディレクトリから呼び出されたファイルを開こうとします。c:\somefile

WSLは、ハードウェア上で直接実行されるのではなく、Windowsシステム内で実行される完全なLinux環境を提供するように設計されています。 Linuxプログラムを実行するには、次のような多くの労力が必要です。ファイル名へのコロンのサポート。したがって、コードは、このようなパスを見ると、それが現在のディレクトリのパスc:\somefileとして扱われていることを確認します。c:\somefile

したがって、WSL プログラムは通常 Windows パスをサポートできません。UNCパスにアクセスできますが、インストールが必要です

ただし、特別な場合(たとえば、コロンやバックスラッシュを含む特定のファイル名など)をサポートしていないことが気に入らない場合は、特定のコマンドの翻訳コードを追加できます。

cdコマンド(シェル組み込み)をカスタマイズするには、シェル組み込みを呼び出す前に必要な操作を実行する関数を直接作成してください。以下は、.zshrc単一の引数で呼び出されたときにWindowsパスを認識するテストされていないコードです。cd

function cd {
  emulate -L zsh
  if [[ $# -eq 1 && ( $1 == [A-Za-z]:\\* || $1 == \\\\*\\* ) ]]; then
    set -- "$(wslpath "$1")"
  fi
  builtin cd "$@"
}

パスにスペースやその他の特殊文字が含まれている場合は、引用符で囲む必要があります。特に、後ろに任意のパスを貼り付けることはできませんcd 。 (唯一の特殊文字が単一の空白の場合はパラメータを連結できますが、たとえば、2つの連続した空白を含むパスの場合は機能しません。)パスをクリップボードのディレクトリに変更するには、次のコマンドを実行します。を使用します。

alias cdp='cd "$(powershell.exe -c Get-Clipboard)"'

おすすめ記事