LINUX.ORG.RU

[sh]Объединение строк

 


0

0

Есть скрипт:

TFTP="xxx.xxx.xxx.xxx"

MAC=$(busybox ifconfig eth0 | busybox grep HWaddr | busybox awk '{print $5}')

echo "Getting settings from your tftp: $TFTP"
busybox tftp -r "pxe\\tiny.cfg\\settings.cfg" -l "./settings.cfg" -g "$TFTP"
if [ -a settings.cfg ]; then
        echo "Parsing settings file"
        PROF=$(grep -i $MAC settings.cfg | awk '{print $2}')
        echo "Found profile: $PROF"
        FILE=${PROF}".tar"
        echo $FILE
        if [ -n "$PROF" ]; then
                busybox tftp -r "pxe\\tiny.cfg\\settings\\$FILE" -l "./$FILE" -g $TFTP
        else
                echo "Your profile have not been found"
        fi
else
        echo "Error retrieving file"
fi
Вывод:
Getting settings from your tftp: xxx.xxx.xxx.xxx
Parsing settings file
Found profile: pfiles
.tares
tftp: server error: (1) File not found
Проблема в том, что после FILE=${PROF}".tar" вместо pfiles.tar получается .tares . Подозреваю, что что-то не так с управляющим символом \r, но так и не понял как это побороть или хотя-бы откуда взялось.

Взялось это из файла. Зависит от того, чем этот файл писал. Лучший вариант - переписать. Для страховки, убрать этот символ в строке можно так (я так делаю)

PROF=$(grep -i $MAC settings.cfg | sed -e 's/[\r]//g' | awk '{print $2}')   
name_no ★★
()

И ещё я что-то не понял: ты часть работы делаешь busybox-ом, часть башем и coreutils - почему так?

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

>PROF=$(grep -i $MAC settings.cfg | sed -e 's/[\r]//g' | awk '{print $2}')

Помогло, файл таки был написан в винде, даром при помощи вима. Смешение bash, coreutils и busybox только от того, что до поры скрипт отлаживается на нецелевой машине.

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

> скрипт отлаживается на нецелевой машине

не забудь, что [ (он же test) - это тоже бинарник из coreutils.

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