私は自分のシェルプログラムを書いています。私は現在、chdirを使用してcdコマンドを実装しています。以下のオプションでchdirを実装したい:
-Pシンボリックリンクをたどらない
-Lシンボリックリンクをたどる(デフォルト)
以前、パスがシンボリックリンクなのか実際のパスなのかを尋ねる質問をここに投稿しました。しかし、その情報では、上記の問題をどのように進めるかについてのアイデアを得ることができません。
ありがとう
私は自分のシェルプログラムを書いています。私は現在、chdirを使用してcdコマンドを実装しています。以下のオプションでchdirを実装したい:
-Pシンボリックリンクをたどらない
-Lシンボリックリンクをたどる(デフォルト)
以前、パスがシンボリックリンクなのか実際のパスなのかを尋ねる質問をここに投稿しました。しかし、その情報では、上記の問題をどのように進めるかについてのアイデアを得ることができません。
ありがとう
多分私は誤解していますが、あなたはただ欲しいだけです(擬似コード):
is_symlink = method_from_other_question();
if(is_symlink and arg(-P))
fail("Can't switch directory -- is a symlink");
すでにこのようなことを試してもうまくいかない場合は、質問にコードを含めてください。デバッグをお手伝いします。
シェルは通常、実際のディレクトリ名を見つけるために多くのトリックを行います。また、ユーザーの利便性のために多くのものを偽造します。例えば:
$ pwd
/home/auser
$ ls -l
adir -> some/place/
some/
$ cd adir
$ pwd
/home/auser/adir
$ cd ..
$ pwd
/home/auser
論理的に見えますか?次に、もう一度見てください: ..
in は を/home/auser/some/place
指していますが/home/auser/some
、/home/auser
まだcd ..
後で に移動していません。
IOW、他に方法はありませんが、常に現在のディレクトリの絶対パスをメモリに保持し、実行時に完全に解析します (そしてそのすべての要素をチェックします) cd
。
はい、それは信頼できません。過去に、bash をだますことができたことがあり、現在のディレクトリの完全に間違った絶対パスが表示されていました。