LINUX.ORG.RU

Suntechnic> Ведь, как-то это делает cd...

да уж. Твой интерактивный шелл и есть bash

а по существу вопроса:

. /your/super/script

sdio ★★★★★
()

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

Begemoth ★★★★★
()

>как изменить текущий каталог с помощью bash-скрипта?

[code=bash] cd $DIRECTORY [/code]

anonymous
()

>Ведь, как-то это делает cd...

«Ведь» не является вводным словом и запятыми не выделяется.

anonymous
()

>Собственно вопрос чрезвычайно прост - как изменить текущий каталог с помощью bash-скрипта

Перед прямым вопросом, включённым в состав бессоюзного сложного предложения, ставится двоеточие, а не тире.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, anonymous.
Ваши замечания чрезвычайно ценны и познавательны, но вопрос касался другого языка. Жаль, что выучив русский язык вы так и не научились читать на нём...

P.S.
Расставьте пожалуйста запятые - я не осилил...

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Потому, что он его не изменяет.

Вопрос скорее относится к логике обращения с окружением и может звучать так: как изменить переменную родительского процесса?

P.S. anonymous, теперь правильно?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Begemoth

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

Я это подозревал, особенно после того как не нашёл файла cd.

Так выхода нет?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Текущий каталог является свойством каждого процесса. bash запускает процессы и у процессов свой текущий каталог. Поэтому оно и встроено в bash, потому что запуски других процессов (вроде исполняемого файла cd) не повлияют на текущий каталог самого процесса bash.

anonymous
()
Ответ на: комментарий от Suntechnic

Так выхода нет?


Нужно вписать
В чью-то тетрадь
Кровью, как в метрополетене:
«Выхода нет».
Выхода нет...

akk ★★★★★
()
Ответ на: комментарий от akk

Извините,
s/метрополетене/метрополитене

akk ★★★★★
()
Ответ на: комментарий от Suntechnic

Вопрос скорее относится к логике обращения с окружением и может звучать так: как изменить переменную родительского процесса?

http://stackoverflow.com/questions/205064/is-there-a-way-to-change-another-processs-environment-variables

не знаю, есть ли более простой способ.

А вообще может подойдёт такое:

/tmp  $ echo cd .. > /tmp/cwdup
/tmp  $ . /tmp/cwdup 
/  $ 

Nao ★★★★★
()
Ответ на: комментарий от Nao

> http://stackoverflow.com/questions/205064/is-there-a-way-to-change-another-pr...

фигасе...

На самом деле климатит то, что команда cd не создаёт каталог, если он отсутствует. Хочется иметь команду которая рекурсивно создавала бы каталог и делала его текущим.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Cancellor

Да, извиняюсь. Системную переменную использовал...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Вообще как бы весь топик посвящен тому, как это сделать, потому, что код

! [ -d $PATH ] && mkdir -p $PATH
cd $PATH
не работает.

Да и не должен...

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Работает. Естественно, внутри скрипта. Т.к. скрипт запускается в отдельной сессии bash. А сменить текущую директорию в bash'е, из которого вызывался скрипт, из скрипта нельзя. Да и зачем это? Если так уж хочется, можно сделать alias mycd=«cd $(sript)», где script - ваш скрипт, который что-то делает, а затем выводит имя директории, в которую нужно перейти по окончании работы скрипта.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от madgnu

Это я к тому, что под эти вещи есть стандартная переменная, чтоб всякие PAATH не придумывать)

madgnu ★★★★★
()
Ответ на: комментарий от Suntechnic

>команда cd не создаёт каталог, если он отсутствует. Хочется иметь команду которая рекурсивно создавала бы каталог и делала его текущим

Если тебя не беспокоит то, что у тебя при этом файлуха засорётся опечаточными каталогами, сделай так:

cd() { test -d «$1» || mkdir «$1» ; builtin cd «$1» }

DonkeyHot ★★★★★
()

гы

Во тупняк развели-то....

~/tmp$ cat t.sh
#!/bin/bash
cd ~/games

~/tmp$ ./t.sh  — не работает и не должно
~/tmp$
~/tmp$ . ./t.sh  — это работает
~/games$

P.S. точка заставляет отрабатывать скрипт в текущем контексте :)

anonymous
()
Ответ на: комментарий от Begemoth

Да.

Спасибо 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

}
Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

эээ.. вообще-то команда builtin здесь избыточна (либо я чего-то глубоко не понимаю). Все и без builtin будет работать, если ты запускаешь не скрипт, а определил функцию и запускаешь функцию.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Ну в скрипте она не сработала... А потом я сделал то, что давно собирался - функцию.

Suntechnic ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.