回答:
実際、方法はありますが、それは素晴らしい方法ではありませんが、方法です。
以下を/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
useradd 'tmp'
、次に置き換えるtmp
と~
shadow
エントリでそれを正当化することについてどのように感じているのかわかりませんが、パスワードが設定されていない限り、それは実際には追加のリスクではありません。
CDPATHを使用して~~
、CDPATHコンポーネントの1つに文字通り名前が付けられたディレクトリを置くことができます。
からman bash
(ただし、CDPATHはでも使用できますsh
)
cdコマンドの検索パス。これは、コロンで区切られたディレクトリのリストで、シェルはcdコマンドで指定された宛先ディレクトリを探します。サンプル値は「。:〜:/ usr」です。
それを行うことができますcd ~~
。
vi ~~/someFile
ディレクトリツリーのどこからでも実行したい場合~~
は、シェルをハックしない限り、文字どおりに主張していると運が悪くなります。ただし、変数または環境変数を使用して、魔法のディレクトリを保存できるため、 、例えば、$tilda/someFile
私は通常、頻繁にアクセスされるファイルをホームディレクトリの短い名前のディレクトリ内に置いて、~/b
またはなどのパスでアクセスできるようにします~/l
。
当然のことながら、通常はディレクトリを好きなだけディレクトリへのシンボリックリンクに置き換えることができます。
シェルの~
チルダ展開はほとんどプログラム可能です。それは後続のコンテキスト内で宣言システムユーザ名のユーザディレクトリのいずれかに展開(既に提供されており、これらの線に沿って優れた溶液)の値は、$HOME
シェル変数、またはすべてではありませんで。
そう:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
私は$HOME
常に変更し、それをリセットするための関数をシェルの環境ファイルに保持しています。
home(){
HOME=~$USER
cd ~; pwd
}
あなたが使用したい場合は~
、あなたのホームディレクトリを参照していない何らかの方法でチルダを、そしてそう。再割り当てするだけ$HOME
です。それを恐れないでください。$HOME
他と同じようにただのシェル変数です。
私が持っている別の提案は、@ PSkocikの使用に関する優れたアドバイスのほんの少しの拡張$CDPATH
です。ただし、彼が言及しなかったことの1つは$CDPATH
、現在のシェル値を$CDPATH
まったく変更せずにインラインで使用および変更できることです。例えば:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
は必ずシェル組み込みですが、POSIXの特別なシェル組み込みではないため、の値を宣言$CDPATH
しても、現在のシェル値には影響しません。上記のように使用すると、その値は$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; }
次に、さらに2文字追加します。
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
そんなに上手くいかないのかvim ~~/foo.txt
、など…
CDPATH
あるcd
場合は、変数を使用してケースを処理します。
~
。また~
、コマンドのようには使用されません。
CDPATH
は、CD以外のコマンドでは機能しないことです。IEあなたはできるcd ~~
かcd ~~/testdir1
が、あなたはできませんでしたvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '