`cd`の戻り状態は常に0です。

`cd`の戻り状態は常に0です。

次のコマンドを実行しています。

cd dirname; echo $?

これは常に0cd が成功したかどうかを返します。これは私に大きな頭痛を与えます。

エラーメッセージを読み取らずにCDが成功したことをどのように確認できますか?

答え1

cdその理由はいつものように内蔵シェルではないからかもしれませんが、

  1. シェル関数
  2. またはエイリアス

検査に合格しましたtype cd

(質問を「閉じる」ために答えとしてコメントしました。)

答え2

私の愚かさ!

HaukeLagingのアドバイスに従って、私はそうしましたtype cd。これはcd、サーバー上のユーザーアクティビティを記録する特定のbash機能のエイリアスであることがわかりました。cd

私のエイリアスがcd返され、cdスクリプトが正常に動作し始めました。私はこの質問についてここで答えなければならないと思うので、まずこの質問を完全に削除したい誘惑を少し感じます。私は他の人に役立ちます。

答え3

1つの解決策は、呼び出しの前にbash組み込みの「コマンド」を接頭辞で付けることです。これにより、実際のバイナリ「cd」が強制的に使用されます。

    root@ds002:~# command cd /foo
    -bash: cd: /foo: No such file or directory
    root@ds002:~# echo $?
    1

答え4

私もこのようなことを経験したことがある。他のすべてが言及したように、これは私の「cd」が関数に包まれているからです。

とにかく、これはうまくいくでしょう。

command cd /mnt/c/nowhere && echo y # does not console "y"

関連情報