Статус возврата `cd` всегда равен 0

Я выполняю следующую команду.

cd dirname; echo $? 

Это всегда возвращает 0 если из cd не удался. Это дает мне невероятную головную боль.

  • Отключить несколько файлов
  • Переместите все файлы в новый каталог, за исключением этого каталога
  • Распространено ли разделение большего скрипта на несколько сценариев и источник их в главном скрипте?
  • Сравнение отрицательных значений в bash с использованием массивов
  • Отображение секунд как дней / часов / мин / сек?
  • Быстрый способ удаления файлов с строками меньше x
  • Как проверить, был ли cd успешным, не прочитав его сообщение об ошибке.

  • Что говорят `declare name` и` declare -g`?
  • Отображение секунд как дней / часов / мин / сек?
  • Как автоматизировать отображение курсора под подсказкой на оболочке
  • Значение «: -» в bash
  • Можно ли предположить, что нулевые или неустановленные переменные будут заменены нулем в арифметических выражениях bash?
  • Можно ли использовать скрипт bash для создания демона?
  • 3 Solutions collect form web for “Статус возврата `cd` всегда равен 0”

    Причина может заключаться в том, что cd не является оболочкой, встроенной, как обычно, но

    1. функция оболочки
    2. или псевдоним

    Это можно проверить с помощью type cd .

    (Я отвечу на комментарий, чтобы вопрос был «закрыт».)

    Эта проблема возникла из-за некоторой глупости. Как было предложено HaukeLaging, я type cd . Оказалось, что cd был псевдонимом некоторой функции bash, которая регистрировала активность пользователя cd на сервере.

    Я с aliased cd вернулся к cd и скрипт начал работать нормально. У меня было мимолетное искушение сначала удалить вопрос, хотя я должен ответить на него здесь. Я мог бы быть полезен кому-то другому.

    Одним из решений является префикс вызова w / bash builtin 'command'. Это заставит использовать фактический двоичный файл 'cd'

      root@ds002:~# command cd /foo -bash: cd: /foo: No such file or directory root@ds002:~# echo $? 1 
    Linux и Unix - лучшая ОС в мире.