~~
が別のディレクトリを指すようにして、ショートカットとして使用できるようにします。 ~
とまったく同じ機能を持たせたい。これどうやってするの?
実際、方法はありますが、それは素晴らしい方法ではありませんが、方法です。
以下を/etc/passwd
ファイルに追加します。
~:x:1111:99:special Character user:/test:/sbin/nologin
1111
をUIDとして意味のあるものに置き換え、/test
を~~に模倣したいディレクトリに置き換えます。
私のシステムの99
はnobody
グループです。これを行う場合は、使用されるファイルに対する権限のないグループであることを確認する場合にお勧めします。理論的には、シェルとして/sbin/nologin
を使用すると、使用できないはずです。また、/etc/shadow
エントリがないため、パスワードがありません。理論的には問題ありませんが、アカウントとしてログインできないようにしてください。
余談ですが、これは良いアイデアだとは決して言いませんが、必要な機能を実現します。
編集:完全を期すために、これはVarunAgwによって提案されました:useradd -s /sbin/nologin -N tmp
を使用して通常どおりユーザーを追加し、次に/etc/passwd
および/etc/shadow
を変更してユーザーをtmp
から~
に変更できます。 home directory
の場所を変更します
CDPATHを使用して、文字通り~~
という名前のディレクトリをCDPATHコンポーネントの1つに置くことができます。
man bash
から(ただし、CDPATHはsh
でも利用可能です)
Cdコマンドの検索パス。これは、コロンで区切られたディレクトリのリストで、シェルはcdコマンドで指定された宛先ディレクトリを検索します。サンプル値は「。:〜:/ usr」です。
これにより、cd ~~
を実行できるようになります。
vi ~~/someFile
のようなことをディレクトリツリーのどこからでも実行したい場合は、シェルをハックしない限り、文字どおり~~
を要求しても運が悪いですが、変数や環境を使用できます。あなたができるようにあなたの魔法のディレクトリを保存する変数、例えば、$tilda/someFile
私は通常、頻繁にアクセスするファイルをホームディレクトリの短い名前のディレクトリ内に配置して、~/b
や~/l
などのパスでアクセスできるようにします。
当然のことながら、通常はディレクトリをディレクトリへのシンボリックリンクに置き換えることができます。
シェルの~
チルダ展開はほとんどプログラム可能です。これは、後続のコンテキストで宣言されたシステムユーザー名のユーザーディレクトリに展開されます(そしてこれらの行に沿った優れたソリューションがすでに提供されています)、$HOME
シェル変数の値、- orまったくありません。
そう:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
私は常に$HOME
を変更し、それをリセットするためにシェルの環境ファイルに関数を保持しています。
home(){
HOME=~$USER
cd ~; pwd
}
ホームディレクトリを参照しない何らかの方法で~
チルダを使用する場合は、そうするを使用します。 $HOME
を再割り当てするだけです。それを恐れないでください。 $HOME
は、他のシェル変数と同様に単なるシェル変数です。
私が持っている別の提案は、$CDPATH
の使用に関する@PSkocikの優れたアドバイスのほんの少しの拡張です。ただし、彼が言及しなかったことの1つは、$CDPATH
の現在のシェル値をまったく変更せずに$CDPATH
をインラインで使用および変更できることです。例えば:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
は必ずしもShellビルトインですが、POSIXではありませんspecial Shellビルトインなので、$CDPATH
の値を宣言しても、現在のShell値には影響しません。上記のように使用すると、$CDPATH
の値は、1つのcd
コマンドの環境でのみ変更され、後で以前の値に復元されます。履歴補完と組み合わせて使用すると、上記の手法が最も役立つと思います。上記のことを行い、ディレクトリに移動し、いくつかのコマンドを実行し、cd
コマンドに戻るまで上に押して、パスセグメントを1つまたは2つバックスペースし、別の場所に移動します。
これら2つの概念を組み合わせると、以前に使用したコマンドを、次に使用するときにまったく異なるものにすることができます。
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Bash関数として完全に機能します。
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
これがもう少し近づく別のアプローチです(要件に近づきません)
function ~~ { echo /test; }
次に、さらにいくつかの文字を追加します。
cd `~~`/subdir
vi `~~`/file