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/ワイブル %