URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8201
[ Назад ]

Исходное сообщение
"Программирование на Шеле /bin/sh"

Отправлено Валентин. , 07-Апр-09 13:19 
Есть такой скриптик.
Изначально он должен был состоять из одной строки (3-я снизу), но
это все работало до тех пор пока в имени файла не появились пробелы.

Программка $0.bin
#/opt/custom/lib/ld-linux.so.2 $0.bin -path /home/user/Soft Tools 2009.bin

принимает пробелы в строке как сепараторы и все что между пробелами считает отдельными самостоятельными путями.

Если сделать так
#/opt/custom/lib/ld-linux.so.2 $0.bin -path /home/user/Soft\ Tools\ 2009.bin

строка читается правильно и все работает. Но...

Скриптик делает следующее: Он ищет пробелы и перед каждым вставляет "\".
Казалось бы счастье. Если строку  пробелами вбить руками - то все работает, но
если давить на таб и заставить баш, например, дополнять строку, то "\" вставляются автоматически, но в переменную $* не попадают.
И потом нет никакой возможности явно их туда прописать.
Я уже моск сломал.

Надо: чтобы в переменной ${new_line} в третьей снизу строке были эти дурацкие символы.

========================================================
#!/bin/sh

new_line=

while [ "$1" != "" ];
do
    tmp_var=$1

    if [ "${tmp_var:0:1}" != "-" ]; then
        if [ "${new_line}" == "" ]; then
            echo "Error"
            exit; # --- error
        fi;
        new_line="${new_line}\\ $1";
    else
        new_line="${new_line} $1";
    fi;
    echo "${new_line}"
    shift;
done;

echo new line is "${new_line}"

/opt/custom/lib/ld-linux.so.2 $0.bin ${new_line}

#/opt/custom/lib/ld-linux.so.2 $0.bin -path /home/user/Soft Tools 2009.bin

#/opt/custom/lib/ld-linux.so.2 $0.bin -path /home/user/Soft\ Tools\ 2009.bin
=================================================


Содержание

Сообщения в этом обсуждении
"Программирование на Шеле /bin/sh"
Отправлено Andrey Mitrofanov , 07-Апр-09 13:43 
>Надо: чтобы в переменной ${new_line} в третьей снизу строке были эти дурацкие
>символы.
>/opt/custom/lib/ld-linux.so.2 $0.bin ${new_line}

/opt/custom/lib/ld-linux.so.2 $0.bin "${new_line}"


"Программирование на Шеле /bin/sh"
Отправлено Валентин. , 07-Апр-09 13:45 
>>Надо: чтобы в переменной ${new_line} в третьей снизу строке были эти дурацкие
>>символы.
>>/opt/custom/lib/ld-linux.so.2 $0.bin ${new_line}
>
>/opt/custom/lib/ld-linux.so.2 $0.bin "${new_line}"

мимо :(((
пробовал.
четвертая снизу строка: в эхе симфолы не выводятся :\


"Программ"
Отправлено Andrey Mitrofanov , 07-Апр-09 13:57 
>мимо :(((
>пробовал.
>четвертая снизу строка: в эхе симфолы не выводятся :\

Ну эт-тогда Вам программист нужен. :/


"Программирование на Шеле /bin/sh"
Отправлено Sarge , 07-Апр-09 18:23 
а так не устроит:
echo new line is \"${new_line}\"
??

"Программирование на Шеле /bin/sh"
Отправлено gaa , 07-Апр-09 20:00 
>вставляются автоматически, но в переменную $* не попадают.

Почитай ман к шеллу на предмет различий между "$*" и "$@".


"Программирование на Шеле /bin/sh"
Отправлено gaa , 07-Апр-09 20:02 
И ещё: прочитай man getopts, чтобы не изобретать велосипед при разборе параметров командной строки.