У меня была эта проблема, и я некоторое время был очень смущен.
Оказалось, что я установил переменную окружения $CDPATH
, которая обычно позволяет обычным cd
командам работать как обычно.Тем не менее, я выполнял свой сценарий в неинтерактивном режиме, как «sh» (не «bash»), где поведение немного отличается.Кажется, что команда вроде:
cd subdir # works via interactive bash; not in script run via sh.
будет работать, как и ожидалось, в моей интерактивной оболочке входа в систему bash, даже если установлена CDPATH
.Тем не менее, когда я запускаю идентичную команду в скрипте (используя sh
), она перестала работать с
myscript.sh: line 9: cd: subdir: No such file or directory
Я изменил ее на относительный путь:
cd ./subdir
и онработает!Я считаю, что разница в том, как оболочка использует CDPATH
.В одном случае он ищет как CDPATH
, так и ваш текущий каталог, но в сценарии он только ищет CDPATH
.Это похоже на поведение PATH
.Если вы пропустите .
(текущий каталог) из своего PATH
, тогда вам нужно будет набрать ./localbinary
вместо localbinary
, чтобы выполнить этот файл.
Это мое обоснованное предположение.Когда я устанавливаю / сбрасываю CDPATH
, он прерывает / отменяет команду cd subdir
, и cd ./subdir
работает во всех случаях для меня.