WSL / Ubuntu / Bashで2つのチルダ「~~」(または同様の文字)を使用してパスへのショートカットを作成するには? [コピー]

WSL / Ubuntu / Bashで2つのチルダ「~~」(または同様の文字)を使用してパスへのショートカットを作成するには? [コピー]

私はUbuntu / Linuxの世界に初めて入門したので、私にはあまりにも過酷なことをしないでください。

私はWindowsでWSL2とbashシェルでUbuntuを使用しています。場合によっては、WindowsからUbuntuに、またはその逆にファイルをコピーしたい場合があります。これを行う方法についていくつかのチュートリアルをオンラインで見つけましたが、最も簡単な方法はに行くことです/mnt/c/Users/<your_user>

~私のWindowsユーザーのホームディレクトリを表すチルダなどの変数を作成したいと思います。私は~~それが予約されていないことがわかったので、二重チルダの使用を検討しました。

/binその名前で実行可能ファイルを作成しましたが、これが必要なパスに~~なります。echoしかし、これは使用するのが面倒です。

このような特殊キャラクターを作る方法はありますか~?そうでなければ、より良い方法はありますか?

私が望む最終結果は、次のことができることです。

cp ~~/Desktop/somefile.txt ~/somefile.txt

答え1

あなたの場合は、シェル変数を代わりに使用できます。たとえば$WH、まだ非常に短いです。

~$ export WH=/mnt/c/Users/your_user

これにより、変数がWHWindowsホームディレクトリに設定され、環境変数としてエクスポートされます。その後、その変数を次のように使用できます。

~$ cp $WH/Desktop/somefile.txt ~/somefile.txt

この設定を永続的にするには、この変数仕様をファイルに追加するだけです.bashrc

ノートWindowsホームディレクトリパスにスペースが含まれている場合は、変数の定義以降の使用時にパスを引用する必要があります。

export WH="/mnt/c/Users/your user"

.bashrcあなたとの間

~$ cp "$WH"/Desktop/somefile.txt ~/somefile.txt

コンソールで使用する場合。

答え2

WSLでは、私の解決策は私のホームディレクトリに私のWindowsプロファイルへのシンボリックリンクを作成することです。私は個人的に以下を使用します。

ln -s /mnt/c/Users/<username> ~/winhome

しかし、短縮することはできます。下にbash、少なくとも~~ 現れるシンボリックリンク名としても使用できますが、場合によっては間違って解釈されることがあります。このパスを試したい場合:

ln -s /mnt/c/Users/<username> ~/~~

その後、アクセスすると次のようになります。

cp ~/myfile ~/~~/Documents/

答え3

質問にタグが付けられていることはわかっていますが、 を使用すると、bashzshのようにできます。

hash -d w='/mnt/c/Users/<your_user>'

このようにして~wその道路に広がります。これは「静的に名前が付けられたディレクトリ」。これは、変数拡張の使用に関するAdminBeeの提案と似ていますが、1つの違いは、タブ補完が拡張に対して機能することです~w/。また、そのディレクトリの下にあり、プロンプトが現在のディレクトリを表示するように設定されている場合は、指定された名前で短いバージョンが表示されます。拡張子のフルパスではなくディレクトリです。

~はこの機能に無効な文字なので~~使用できません。

答え4

また、ほとんどのシェル(少なくともBash、Fish、Zsh、さらにはDash)で動作する@JoLの回答アプローチでは、wWindowsユーザープロファイルを指すホームディレクトリに名前を付けて新しいユーザーを作成するだけです。それから~w/ショートカットになりました。また、ユーザー名と連携してショートカットが~生成されるようです~~。詳しくは下記をご覧ください。

ユーザーレベルのセキュリティ概念がないため、この目的のためにWSLでユーザーを作成することには実際には欠点はありません(つまり、wsl -u rootパスワードなしでWSLインスタンスのすべてへのフルアクセス権がすでに付与されています)。

シンプル...

sudo useradd --home-dir /mnt/c/Users/<username> w

...WSLで動作します。ただし、「ベストプラクティス」は次のようになります。

sudo useradd --no-user-group --non-unique -u 1000 -g 1000 --shell /sbin/nologin -f0 -e0 --home-dir /mnt/c/Users/<username> w

wこれにより、デフォルトのWSLユーザーと同じユーザーIDとグループID(1000:1000)を持つユーザーが作成されます(これは、不要なuid / gidでシステムを汚染しないようにするための個人的な好みです)。このユーザーには、nologinシェル、期限切れのパスワード、およびロックされたアカウントがあります。その場合、WSLにはとにかくこの追加の「セキュリティ」は実際には必要ありません。

JoLの答えと同様に、これは次のことを可能にします。

cp ~/myfile ~w/Documents/

一部の極端なケースでは、問題が発生する可能性があります。オプションをuseradd使用すると、ユーザー名を--badname強制的に許可できます。~

sudo useradd --badname --home-dir /mnt/c/Users/<username> "~" # or ...
sudo useradd --badname --no-user-group --non-unique -u 1000 -g 1000 --shell /sbin/nologin -f0 -e0 --home-dir /mnt/c/Users/<username> "~"

お客様の初期リクエストの結果は次のとおりです。

cp ~/myfile ~~/Documents

関連情報