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側の環境変数を$WSLENV
WSL側の環境変数にマップできます。たとえば、/mnt/c/Users/username/
Windows側はそれを%USERPROFILE%
環境変数として保存します。
これを行うには、まずコマンドプロンプトで管理者としてこのコマンドを実行して、Windowsで変数を追加します。
setx WSLENV USERPROFILE
.bashrc
次に(または同様のファイル)にエイリアスを追加します。例えば、
alias windocs='cd $(wslpath $USERPROFILE/Documents)'
これは、wslpath
Windowsスタイルのパス(バックスラッシュ)を* NIXスタイルのパス(スラッシュ)に変換します。模式図では、
Windows <---> WSL
C:\Users\username <---> /mnt/c/Users/username
USERPROFILE <---> WSLENV
読むWSLとWindows間で環境変数を共有する詳しくはブログをご覧ください。