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
上記が返されるのはなぜですか1
?cd -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の名前空間が記載されていますが、名前ではアクセスできません。
答え2
終了コード 1 は成功ではなく失敗を示します。したがって、cd -Pe ..
変更後に現在のディレクトリを確認できないことを正しく示します。
私が知っている限り、-Pe
必要な時期についてはあなたの言葉が正しいです。削除されたディレクトリへのシンボリックリンクが破損した場合など、他の場合はcd
エラーメッセージと終了コード1(-Pe
。
バラより次の bash cd オプションの例: cd -Pe@ $directoryこれについての詳細は...