Спасибо, anonymous.
Ваши замечания чрезвычайно ценны и познавательны, но вопрос касался другого языка. Жаль, что выучив русский язык вы так и не научились читать на нём...
P.S.
Расставьте пожалуйста запятые - я не осилил...
Текущий каталог является свойством каждого процесса. bash запускает процессы и у процессов свой текущий каталог. Поэтому оно и встроено в bash, потому что запуски других процессов (вроде исполняемого файла cd) не повлияют на текущий каталог самого процесса bash.
На самом деле климатит то, что команда cd не создаёт каталог, если он отсутствует. Хочется иметь команду которая рекурсивно создавала бы каталог и делала его текущим.
Работает. Естественно, внутри скрипта. Т.к. скрипт запускается в отдельной сессии bash. А сменить текущую директорию в bash'е, из которого вызывался скрипт, из скрипта нельзя. Да и зачем это?
Если так уж хочется, можно сделать alias mycd=«cd $(sript)», где script - ваш скрипт, который что-то делает, а затем выводит имя директории, в которую нужно перейти по окончании работы скрипта.
Спасибо Begemoth и DonkeyHot - builtin таки работает
mcdir()
{
# Справка
if [ "$1" = "-h" -o "$1" = "--help" ] # Request help.
then
echo ""
echo "Порядок использования: mcdir dirname"
echo " mcdir [-h|--help] - выводит эту справку"
echo "Создаёт каталог и делает его текущим."
echo " dirname - путь к каталогу"
echo ""
else
# Обработка естественных ошибок
# Проверка параметров
if [ "$1" = "" ]
then
echo "mcdir: пропущен операнд"
echo "Попробуйте 'mcdir --help' для получения более подробного описания."
else
mkdir -p "$1" 2>/dev/null
# Проверяем получили ли мы каталог
if [ ! -d "$1" ]
then
echo "Ошибка при создании каталога '$1'"
else
builtin cd "$1"
fi
fi
fi
}
эээ.. вообще-то команда builtin здесь избыточна (либо я чего-то глубоко не понимаю). Все и без builtin будет работать, если ты запускаешь не скрипт, а определил функцию и запускаешь функцию.