CDの「-e」オプション

CDの「-e」オプション

Bashのマニュアルページに従って戻り失敗状態を引き起こす-eオプションcd正常にディレクトリを変更した後

-eオプションが-Pに付属していて、cdがディレクトリの正常な変更後に現在の作業ディレクトリを正常に確認できない場合、cdは失敗ステータスを返します。

$ cd
$ mkdir -p test/a/b
$ cd test/a/b
$ rmdir ../b ../../a
$ cd -Pe ..; echo $?
cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
1

上記が返されるのはなぜですか1cd -Pe ..現在のディレクトリと親ディレクトリの両方がもう存在しない場合は、どのようにディレクトリを正常に変更できますか?

また、目的のディレクトリに変更できないたびに失敗した戻り状態を返すには、cdどのような状況で追加する必要がありますか-Pe?私が知る限り、orのパラメータを使用する.ときにのみ必要です。..cd

ベストアンサー1

cd -Pe ..現在のディレクトリと親ディレクトリの両方がもう存在しない場合は、どのようにディレクトリを正常に変更できますか?

これは、シェル(または他のプロセス)がそれを開いたままにしているか、現在のディレクトリに保持している限り、まだ存在するためです。これは、エンドユーザーが閉じるまでファイルが存在する方法と似ていますが、ファイルをディレクトリに含めることができないため、ディレクトリにはあまり便利ではありません(リンク解除時にディレクトリは空でなければなりません)。

そうでない場合でも-e文句cdを言うことになりますが、ディレクトリの変更はあなたが見ているように見え続けます。ここではディレクトリと権限を区別できますが、まだ役に立つことはありません。

/tmp$ mkdir -p test/a/b
/tmp$ chmod 0700 test/a/b; chmod 0770 test/a
/tmp$ cd test/a/b
/tmp/test/a/b$ rmdir ../b ../../a
/tmp/test/a/b$ ls -ld .
drwx------ 0 user group 0 Mar  7 18:51 ./         # This is 'a'
/tmp/test/a/b$ cd -P ..
cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
$ ls -ld .
drwxrwx--- 0 user group 0 Mar  7 18:51 ./         # this is 'b'
$ touch foo
touch: cannot touch 'foo': No such file or directory

作業ディレクトリをフルパスを決定できないディレクトリに変更する他の方法は考えられません。cd中間ディレクトリに対する読み取り権限がないディレクトリに入ることができます。ただし、この場合でも、直接またはすべてのシンボリックリンクを手動で確認して、選択したパスを知ることができます。

少なくともLinuxでは、getcwd()プロセス自体が中間ディレクトリ名を読み取れない場合でも、現在のディレクトリへのパスがわかります。マニュアルページchrootには、ディレクトリ内のプロセスに可能な方法でsとmountの名前空間が記載されていますが、名前ではアクセスできません。

おすすめ記事