「~」(ホームディレクトリ)のような別のショートカット「~~」を作成します。

「~」(ホームディレクトリ)のような別のショートカット「~~」を作成します。

~~ショートカットとして使用できるように別のディレクトリを指したいと思います。私はそれがまったく同じ機能を持つことを望みます~。どうすればいいですか?

答え1

実際にはあまり良い方法ではありませんが、方法はあります。ハハ!

ファイルに以下を追加します/etc/passwd

~:x:1111:99:special Character user:/test:/sbin/nologin

UIDを1111意味のあるものに変更してください。/testエミュレートするディレクトリに置き換えます~~

99nobody私のシステムではグループです。グループであることを確認するには、これをお勧めします。いいえ使用するすべてのファイルに対する権限。理論的には、/sbin/nologinシェルとして使用できず、項目もなく、/etc/shadowパスワードもありません。理論的には問題はありませんが、そのアカウントでログインできないようにする必要があります。

注:これは良い考えだとは言いませんが、必要に応じて機能します。

編集:完全性のために@VarunAgwが提案したものは次のとおりです。

通常、ユーザーを追加してuseradd -s /sbin/nologin -N tmpからユーザーを変更/etc/passwdおよび変更/etc/shadowし、ホームディレクトリの場所を変更できます。tmp~

答え2

CDPATHを活用し、~~ 文字通り名前付きディレクトリをCDPATHコンポーネントの1つに配置できます。

from man bash(ただしCDPATHはでも使用可能sh

cd コマンドの検索パスです。これは、シェルがcdコマンドで指定されたターゲットディレクトリを見つけるためのコロンで区切られたディレクトリのリストです。例の値は「.:~:/usr」です。

そうすれば、あなたもそうすることができるでしょうcd ~~

ディレクトリツリーのどこでもこのようなことをしたい場合は、シェルをハッキングしない限り文字通りの意味に固執するとvi ~~/someFile幸運ではありません。~~ただし、変数または環境変数を使用してマジックディレクトリを保存できます。たとえば、次のようにできます。$tilda/someFile

~/b私は通常、頻繁にアクセスするファイルをホームディレクトリの簡単な名前のディレクトリに配置することによって~/l

もちろん、必要に応じて、通常、ディレクトリをディレクトリへのシンボリックリンクに置き換えることができます。

答え3

シェルの~波線拡張は次のとおりです。最大プログラム可能。末尾のコンテキストで宣言されたシステムユーザー名のユーザーディレクトリに展開されます。(そしてこれらのラインに沿った優れたソリューションが提供されました)、シェル変数の値$HOMEまたは別言します。

だから:

(HOME=/tmp; cd ~)
pwd; echo "$HOME"

/tmp
/home/mikeserv

私は$HOMEそれを変更し、それをリセットするためにシェルの環境ファイルに関数を保持しました。

home(){
    HOME=~$USER
    cd ~; pwd
}

~ホームディレクトリを参照しない方法でチルダを使用するには、次の手順を実行します。この方法。ただ再割り当てしてください$HOME。それを恐れないでください。$HOME他の変数と同様に、シェル変数です。


私のもう一つの提案は@PSkocikに$CDPATH。たとえば、$CDPATH$CDPATH

mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2

/tmp/1/2

cdシェルに組み込まれている必要がありますが、POSIXではありません。特別なシェルが組み込まれているため、for 値を宣言しても$CDPATH現在のシェル値には影響しません。上記のように使用すると、$CDPATH1つの命令の環境によってのみ値が変わり、cd以前の値に戻ります。私は上記の技術を記録の完成と組み合わせるのに最も役に立つと思う傾向があります。上記のタスクを実行し、ディレクトリに変更し、いくつかのコマンドを実行してから、コマンドに戻るまで上矢印キーを押して、1つまたは2つのパスセグメントをバックスペースしてcd別の場所に移動します。


この2つの概念を組み合わせることで、以前に使用したコマンドを次に使用したときにまったく異なる意味を持つようにすることができます。

for HOME in /tmp ~
do  mkdir -p ~/1/2
    CDPATH=~ cd 1/2
done

/tmp/1/2
/home/mikeserv/1/2

答え4

Bash機能と完全に機能します。

$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman

もっと近い別の方法があります。 (要求事項にあまり近いわけではないことを知っています。)

function ~~ { echo /test; }

それにはいくつかの役割があります。

cd `~~`/subdir
vi `~~`/file

関連情報