LINUX.ORG.RU

История изменений

Исправление vachicul, (текущая версия) :

Выводится список для выбора

entry

path/

Выбираем вторую строку - path/ Программа выводит содержимое path/

entry2

path2/

path3/

Входим дальше, выбираем path3/ Выводим содержимое path3/

path4/

path5/

path6/

Выбираем 3, входим в каталог path6/ Выводим содержимое path6/

path7/

path8/

path9/

entry10

Теперь выбираем 4 - entry10 - это запись. Обрабатываем её и выводим тот же список path6/

path7/

path8/

path9/

entry10

Тепрь выбираем 0 - то есть вернуться в родителя path3/, для этого нужно что бы программа знала полный путь path/path3/ и вывела список из него

path4/

path5/

path6/

Ещё раз выбираем 0 и возвращаемся в /path

entry2

path2/

path3/

Ещё раз жмём 0 и возвращаемся в корень /

entry

path/

как это реализовано в моих циклах с ограниченной глубиной

list=$(ls -l /parent/)
while true; do
	echo "$list"
	read str
	if [ $str = 0 ]; then break; fi
	choose=$(echo "$list" | sed -n "$str"p)
	check=$(echo $choose | grep "/")
	while true; do
	if [ -n "$check" ]; then
		list2=$(ls -l /parent/$choose)
		echo "$list2"
		read str
		if [ $str = 0 ]; then break; fi
		choose2=$(echo "$list2" | sed -n "$str"p)
		check=$(echo $choose2 | grep "/")
		while true; do
		if [ -n "$check" ]; then
			list3=$(ls -l /parent/$choose$choose2)
			echo "$list3"
			read str
			if [ $str = 0 ]; then break; fi
			choose3=$(echo "$list3" | sed -n "$str"p)
			check=$(echo $choose3 | grep "/")
			while true; do
			if [ -n "$check" ]; then
				list4=$(ls -l /parent/$choose$choose2$choose3)
				echo "$list4"
				read str
				if [ $str = 0 ]; then break; fi
				choose4=$(echo "$list4" | sed -n "$str"p)
				rm /parent/$choose$choose2$choose3$choose4
			else
				rm /parent/$choose$choose2$choose3
			fi; done
		else
			rm /parent/$choose$choose2
		fi; done
	else
		rm /parent/$choose
	fi; done
done
Такая лапша меня не устраивает и встраивать туда дополнительный код это боль, а количество уровней ограничено длинной лапши

Исправление vachicul, :

Выводится список для выбора

entry

path/

Выбираем вторую строку - path/ Программа выводит содержимое path/

entry2

path2/

path3/

Входим дальше, выбираем path3/ Выводим содержимое path3/

path4/

path5/

path6/

Выбираем 3, входим в каталог path6/ Выводим содержимое path6/

path7/

path8/

path9/

entry10

Теперь выбираем 4 - entry10 - это запись. Обрабатываем её и выводим тот же список path6/

path7/

path8/

path9/

entry10

Тепрь выбираем 0 - то есть вернуться в родителя path3/, для этого нужно что бы программа знала полный путь path/path3/ и вывела список из него

path4/

path5/

path6/

Ещё раз выбираем 0 и возвращаемся в /path

entry2

path2/

path3/

Ещё раз жмём 0 и возвращаемся в корень /

entry

path/

как это реализовано в моих циклах с ограниченной глубиной

list=$(ls -l /parent/)
while true; do
	echo "$list"
	read str
	if [ $str = 0 ]; then break; fi
	choose=$(echo "$list" | sed -n "$str"p)
	check=$(echo $choose | grep "/")
	while true; do
	if [ -n "$check" ]; then
		list2=$(ls -l /parent/$choose)
		echo "$list2"
		read str
		if [ $str = 0 ]; then break; fi
		choose2=$(echo "$list2" | sed -n "$str"p)
	        check=$(echo $choose2 | grep "/")
		while true; do
		if [ -n "$check" ]; then
			list3=$(ls -l /parent/$choose$choose2)
			echo "$list3"
			read str
			if [ $str = 0 ]; then break; fi
			choose3=$(echo "$list3" | sed -n "$str"p)
                        check=$(echo $choose3 | grep "/")
			while true; do
			if [ -n "$check" ]; then
				list4=$(ls -l /parent/$choose$choose2$choose3)
				echo "$list4"
				read str
				if [ $str = 0 ]; then break; fi
				choose4=$(echo "$list4" | sed -n "$str"p)
				rm /parent/$choose$choose2$choose3$choose4
			else
				rm /parent/$choose$choose2$choose3
			fi; done

		else
			rm /parent/$choose$choose2
		fi; done
	else
		rm /parent/$choose
	fi; done
done
Такая лапша меня не устраивает и встраивать туда дополнительный код это боль, а количество уровней ограничено длинной лапши

Исправление vachicul, :

Выводится список для выбора

entry

path/

Выбираем вторую строку - path/ Программа выводит содержимое path/

entry2

path2/

path3/

Входим дальше, выбираем path3/ Выводим содержимое path3/

path4/

path5/

path6/

Выбираем 3, входим в каталог path6/ Выводим содержимое path6/

path7/

path8/

path9/

entry10

Теперь выбираем 4 - entry10 - это запись. Обрабатываем её и выводим тот же список path6/

path7/

path8/

path9/

entry10

Тепрь выбираем 0 - то есть вернуться в родителя path3/, для этого нужно что бы программа знала полный путь path/path3/ и вывела список из него

path4/

path5/

path6/

Ещё раз выбираем 0 и возвращаемся в /path

entry2

path2/

path3/

Ещё раз жмём 0 и возвращаемся в корень /

entry

path/

как это реализовано в моих циклах с ограниченной глубиной

list=$(ls -l /parent/)
while true; do
	echo "$list"
	read str
	if [ $str = 0 ]; then break; fi
	choose=$(echo "$list" | sed -n "$str"p)
	check=$(echo $choose | grep "/")
	while true; do
	if [ -n "$check" ]; then
		list2=$(ls -l /parent/$choose)
		echo "$list2"
		read str
		if [ $str = 0 ]; then break; fi
		choose2=$(echo "$list2" | sed -n "$str"p)
		while true; do
		if [ -n "$check" ]; then
			list3=$(ls -l /parent/$choose$choose2)
			echo "$list3"
			read str
			if [ $str = 0 ]; then break; fi
			choose3=$(echo "$list3" | sed -n "$str"p)
			while true; do
			if [ -n "$check" ]; then
				list4=$(ls -l /parent/$choose$choose2$choose3)
				echo "$list4"
				read str
				if [ $str = 0 ]; then break; fi
				choose4=$(echo "$list4" | sed -n "$str"p)
				rm /parent/$choose$choose2$choose3$choose4
			else
				rm /parent/$choose$choose2$choose3
			fi; done

		else
			rm /parent/$choose$choose2
		fi; done
	else
		rm /parent/$choose
	fi; done
done
Такая лапша меня не устраивает и встраивать туда дополнительный код это боль, а количество уровней ограничено длинной лапши

Исходная версия vachicul, :

Выводится список для выбора

entry

path/

Выбираем вторую строку - path/ Программа выводит содержимое path/

entry2

path2/

path3/

Входим дальше, выбираем path3/ Выводим содержимое path3/

path4/

path5/

path6/

Выбираем 3, входим в каталог path6/ Выводим содержимое path6/

path7/

path8/

path9/

entry10

Теперь выбираем 4 - entry10 - это запись. Обрабатываем её и выводим тот же список path6/

path7/

path8/

path9/

entry10

Тепрь выбираем 0 - то есть вернуться в родителя path3/, для этого нужно что бы программа знала полный путь path/path3/ и вывела список из него

path4/

path5/

path6/

Ещё раз выбираем 0 и возвращаемся в /path

entry2

path2/

path3/

Ещё раз жмём 0 и возвращаемся в корень /

entry

path/

как это реализовано в моих циклах с ограниченной глубиной

list=$(ls -l /parent/)
while true; do
	echo "$list"
	read str
	if [ $str = 0 ]; then break; fi
	choose=$(echo "$list" | sed -n "$str"p)
	check=$(echo $choose | grep "/")
	while true; do
	if [ -n "$check" ]; then
		list2=$(ls -l /parent/$choose)
		echo "$list2"
		read str
		if [ $str = 0 ]; then break; fi
		choose2=$(echo "$list2" | sed -n "$str"p)
		while true; do
		if [ -n "$check" ]; then
			list3=$(ls -l /parent/$choose$choose2)
			echo "$list3"
			read str
			if [ $str = 0 ]; then break; fi
			choose3=$(echo "$list3" | sed -n "$str"p)
			while true; do
			if [ -n "$check" ]; then
				list4=$(ls -l /parent/$choose$choose2$choose3)
				echo "$list4"
				read str
				if [ $str = 0 ]; then break; fi
				choose4=$(echo "$list4" | sed -n "$str"p)
				rm /parent/$choose$choose2$choose3$choose4
			else
				rm /parent/$choose$choose2$choose3
			fi
		else
			rm /parent/$choose$choose2
		fi
	else
		rm /parent/$choose
	fi
done
Такая лапша меня не устраивает и встраивать туда дополнительный код это боль, а количество уровней ограничено длинной лапши