ユーザー名にスペースとアポストロフィが含まれている場合のUbunth WSLでbashエイリアスを作成する方法

ユーザー名にスペースとアポストロフィが含まれている場合のUbunth WSLでbashエイリアスを作成する方法

Ubuntu WSLで次のエイリアスを作成しようとしています。

alias windocs='cd /mnt/c/Users/Firstname L'astname/Documents/'

残念ながら、私のユーザー名は名前城、スペースとアポストロフィが含まれています。

バックスラッシュを使ってみました。

alias windocs='cd /mnt/c/Users/Firstname\ L\'astname/Documents/'

しかし、bashはまだアポストロフィを文字列の終わりとして解釈し、次のエラーを引き起こします。

-bash: .bash_aliases: line 11: unexpected EOF while looking for matching `''
-bash: .bash_aliases: line 12: syntax error: unexpected end of file

また、ユーザー名を二重引用符で囲んでみました。

alias windocs='cd /mnt/c/Users/"Firstname L'astname"/Documents/'

同じエラーが発生します。

このエイリアスが機能するようにするにはどうすればよいですか?毎回ドキュメントフォルダまでCDを入れるのは痛いです。

答え1

一重引用符で囲まれた文字列内の一重引用符はエスケープできませんが、幸いにもエイリアス定義の周囲に二重引用符を使用してから、ディレクトリ名の周りに二重引用符を使用できます(エスケープ処理)。

alias windocs="cd \"/mnt/c/Users/Firstname L'astname/Documents/\""

あるいは、このディレクトリをLinuxホームディレクトリにシンボリックリンクすることもできます。

ln -s "/mnt/c/Users/Firstname L'astname/Documents/" ~/docs

次に、単にcd docs(またはcd ~/docsホームディレクトリにない場合)、その場所に移動します。

答え2

まあ、まずこれから調べなければなりませんね。私はこのstackoverflowに沿って文字列全体を二重引用符で囲みました。回答:

alias windocs="cd /mnt/c/Users/Firstname\ L\'astname/Documents/"

今大丈夫です。これは、一重引用符で囲まれた文字列のエスケープメカニズムはありませんが、二重引用符で囲まれた文字列のメカニズムがあるためです(他の回答に従って)。

答え3

Linux用Windowsサブシステム(WSL)のみ、Windows側の環境変数を$WSLENVWSL側の環境変数にマップできます。たとえば、/mnt/c/Users/username/Windows側はそれを%USERPROFILE%環境変数として保存します。

これを行うには、まずコマンドプロンプトで管理者としてこのコマンドを実行して、Windowsで変数を追加します。

setx WSLENV USERPROFILE

.bashrc次に(または同様のファイル)にエイリアスを追加します。例えば、

alias windocs='cd $(wslpath $USERPROFILE/Documents)'

これは、wslpathWindowsスタイルのパス(バックスラッシュ)を* NIXスタイルのパス(スラッシュ)に変換します。模式図では、

   Windows        <--->      WSL
C:\Users\username <--->  /mnt/c/Users/username
USERPROFILE       <--->  WSLENV

読むWSLとWindows間で環境変数を共有する詳しくはブログをご覧ください。

関連情報