2017-02-09 5 views
2

私は、端末のタブでシンボリックリンクとPWDの奇数動作

cd link_name 

経由

ln -s /path/to/linked/dir current/path/link_name 

てシンボリックリンクを作成し、current/path/link_nameにディレクトリを変更した場合、私はPWD-コマンドを使用していますどこ私は確認することができます。出力は

current/path/link_name 

になります。しかし、私は、このようなターミネーター、konsoleのか、などのようないくつかの端末エミュレータを、使用している場合、私はタブを分割または同じディレクトリに新しいタブを作成することができます。新しく作成されたタブのpwdコマンドの出力は

/path/to/linked/dir 

です。多くの場合、これは便利ではありません。誰もどの端末エミュレータでこの動作を変更する方法を知っていますか?

P.S. から入力されたlsの出力は、の出力が/path/to/linked/dirと同じであることに気付きました。

答えて

0

ターミネーター1.90はあなたが望むことをします。例セッションで:E(又は、又はトン O ) -

$ cd -- "$(mktemp --directory)" 
$ mkdir a 
$ ln -s a b 
$ cd b 

押しCtrlキー - シフト。この時点で私はまだbです。

+0

が10b0で述べたように、垂直方向と水平方向に分割すると作業ディレクトリが保持されますが、新しいタブはターミネータの元のディレクトリに持ち込まれます –

+0

新しいタブはここで分割するのとまったく同じです。だから私は "Ctrl-Shift-t"と言いました。 – l0b0

+0

私にとってはまったく機能しません。あなたはどのOSを使用していますか? –

1

できません。その理由は、システムコールが実行された後、そこにどのように到達したのかに関する情報を失うためです。いくつかの端末エミュレータと主にbash(1)シェルはこれを覚えて、このシナリオに対処するために内部コマンドとしてpwdを実装しようとします。あなたは

/bin/pwd 

をしようとした場合しかし、一般的にはあなたがその最後のディレクトリに手に入れた方法についてのすべての情報は、時間の経過に失われたことを発見するでしょう。

はどのように/bin/pwd動作することができます自問してみて、どのようにそれはあなたがオンになっている、そしてあなた自身に質問にお答えしますディレクトリを決定することができます

をシステムがカレントディレクトリを維持(pwdコマンドがこの投稿を継承しますそのプロセスのシステムデータには、その親のシェル)が保存されますが、リソースを節約するために、現在のディレクトリ(実際にはin-core inode構造への参照を保持しているわけではありません)ファイルの場所を特定するために使用したパスは保存されず、ファイルを開くときに相対パスを要求するときに開始点を取得できるだけの情報が格納されます。問題は、複数のリンクされたファイルがどのディレクトリに属しているかを判断するのと同じです...ファイルに親ディレクトリが保存されていないため、複数のディレクトリにリンクされている可能性があります。同時にすべて ...これはディレクトリにも当てはまりますが、..のエントリは、親にリンクしています(本当の親).1つのディレクトリが通常のリンクで異なるディレクトリに属する​​ことが許可されているため、 mkdir(2)システムコールによって保証されています)pwd(1)コマンドは、これらのリンクを使って親ディレクトリを見つけ出します(そして、このディレクトリが現在のディレクトリのinode番号を検索することによって、親ディレクトリ内の現在のディレクトリを探します)同じinode(ルートディレクトリにはこの特殊な特性があり、..エントリポイントが再びそれ自身になる)ので、上がってしまうことはありません。 pwdのため、ディレクトリに従っており、決してファイルではありません。

関連する問題