なぜならマニュアルが間違っています。。

なぜならマニュアルが間違っています。。

Bourne Again シェルマニュアルは次のように述べています:cd dir

[...] すべてのディレクトリ名がCDPATH検索されます。目次。 [… ]もし目次スラッシュ(/)で始まり、未CDPATH使用のままにしてください。

Zシェルマニュアルには次のように記載されています。cd arg

そうでない場合アルギニンスラッシュで始まり、指定されたディレクトリに変更を試みます。アルギニン

もしアルギニンスラッシュで始まらない場合、動作は現在のディレクトリが.シェル引数に含まれるディレクトリのリストに表示されるかどうかによって異なりますcdpath。 [...] .存在するcdpath場合、cdpath検索は厳密に順次であるため、.適切な時点でのみ試行されます。

POSIX一般シェルマニュアルには次のように記載されていますCDPATH

inコマンドPATHで始まらないディレクトリと同じように機能します。/cd

Debian Almquist シェルマニュアルは次のように述べていますcd

[...]シェル変数が設定され、ディレクトリ名がスラッシュで始まらない場合は、リストされたディレクトリから指定されたディレクトリがCDPATH検索されます。CDPATH

93年Kornシェルマニュアルには次のように記載されています。cd arg

もしアルギニンで始まる場合、/検索パスは使用されません。それ以外の場合は、パス内の各ディレクトリが検索されます。アルギニン

MirBSD Korn シェルマニュアルは次のように述べていますCDPATH

inコマンドPATHで始まらないディレクトリと同じように機能します。/cd

'93 Kornシェルを除いて、実際にはそうではありません。

% エクスポート CDPATH=/tmp:
%mkdir wibble /tmp/wibble
%ksh93 -c 'cd ./wibble'
/tmp/ワイブル
% ダッシュ -c 'cd ./wibble ;password'
/ホーム/JdeBP/wibble
% bash -c 'cd ./wibble ;password'
/ホーム/JdeBP/wibble
%mksh -c 'cd ./wibble ;password'
/ホーム/JdeBP/wibble
% lksh -c 'cd ./wibble ;パスワード'
/ホーム/JdeBP/wibble
% posh -c 'cd ./wibble ;password'
/ホーム/JdeBP/wibble
%zsh -c 'cd ./wibble ;password'
/ホーム/JdeBP/wibble
%

/tmp/./wibble存在し、ディレクトリですが、 '93 Kornシェルのみを検索してCDPATH検索します。残りはそうではありません。

なぜできないの?

答え1

なぜならマニュアルが間違っています。

93年、Kornシェルも間違っていました。

1997年シングル Unix 仕様説明する:

ディレクトリオペランドが/スラッシュ()文字で始まらず、最初のコンポーネントがドットまたはドットポイントではない場合、cd検索は次のようになります。目次CDPATHリストされた順序で変数で指定された各ディレクトリに基づいています。

2016年シングル Unix 仕様同じことを言う他の少し重複する方法:

3. もし目次オペランドは<スラッシュ>文字で始まり、curpathオペランドに設定してからステップ7に進みます。

4. 最初のコンポーネントの場合目次オペランドが点または点 - 点の場合は、手順6に進みます。

[… ]

6.curpathディレクトリオペランドに設定します。

マニュアルには.and の部分は記載されていませんが、..'93 Korn シェルを除くすべてのシェルが実際に実行する作業は、マニュアルに次のように記載されていますが、です。

% エクスポート CDPATH=/tmp:
%lksh -c 'CDスイング'
/tmp/ワイブル
%ダッシュ-c「CDスイング」
/tmp/ワイブル
%posh -c 'CDスイング'
/tmp/ワイブル
%bash -c 'CDスイング'
/tmp/ワイブル
%mksh -c 'CDスイング'
/tmp/ワイブル
%zsh -c 'CDスイングパスワード'
/tmp/ワイブル
%

関連情報