Переход в директории с помощью cd (Скрипт)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

mrproz
Сообщения: 2
ОС: solaris 10

Переход в директории с помощью cd

Сообщение mrproz »

Имеется скрипт , вот его кусок :

Код: Выделить всё

2) echo "input new directory"
read
tmp=$(echo $REPLY | sed 's/^[-]/\.\/-/')
cd -- "$tmp" 2>>errors
    echo ok;pwd
;;


Реализовывает переход в директории по абсолютному пути, начинающиеся с "-", но вот стоит появиться каталогу с именем "*" (только звездочка) и всë. Как бы не ректальным способом это реализовать?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Переход в директории с помощью cd

Сообщение watashiwa_daredeska »

Заключить $REPLY в кавычки.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Переход в директории с помощью cd

Сообщение allez »

Что-то очень сей кусок кода напоминает мне какое-то учебное задание...
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Переход в директории с помощью cd

Сообщение sgfault »

mrproz писал(а):
24.03.2012 13:26
Имеется скрипт , вот его кусок :

Код: Выделить всё

2) echo "input new directory"
read
tmp=$(echo $REPLY | sed 's/^[-]/\.\/-/')
cd -- "$tmp" 2>>errors
    echo ok;pwd
;;


Реализовывает переход в директории по абсолютному пути, начинающиеся с "-", но вот стоит появиться каталогу с именем "*" (только звездочка) и всë. Как бы не ректальным способом это реализовать?

А также, стоит рассмотреть вариант отключения pathname expansion совсем

на случай, если вам захочется написать что-то такое

Код: Выделить всё

IFS="$newline"
for s in $(find); do
   echo "Found '$s'"
done

В этом примере вы не можете взять $(find) в кавычки, тк тогда отключится word splitting, и весь вывод find будет восприниматься как один файл, с другой стороны, если вы не возьмете его в кавычки, то к результатам будет применен pathname expansion, что совсем не нужно.
Спасибо сказали:
mrproz
Сообщения: 2
ОС: solaris 10

Re: Переход в директории с помощью cd

Сообщение mrproz »

таки "$REPLY" решила эту проблему, спасибо всем откликнувшимся!
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Переход в директории с помощью cd

Сообщение SLEDopit »

mrproz писал(а):
24.03.2012 13:26
tmp=$(echo $REPLY | sed 's/^[-]/\.\/-/')
1. Я так и не понял на фига оно надо. И без замены всё прекрасно переходит.
2. Можно воспользоваться ${REPLY/#-/.\/} вместо непонятных переменных и sed'ов
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Переход в директории с помощью cd

Сообщение t.t »

Замена действительно была бы нужна только без "--". Да и сама команда s записана в высшей степени избыточно.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: