Что не так с моим скриптом?

echo "Environment validation started"
ID=`getValueFromFile "ID"`
echo $ID
FAILLOG=$HOME/$ID/logs/1.log
echo $FAILLOG
echo $HOME/$ID/logs/1.log
>$FAILLOG 

ВЫХОД:

Environment validation started
JASONID
/logs/1.log
/logs/1.log
/logs/1.log: No such file or directory/home/gol/JASONID

В идеале эхо должно давать что-то вроде этого, верно?

/home/gol/JASONID/logs/1.log

Добавление вывода bash -vx

+ echo $'JASONID\r'
JASONID
FAILLOG=$HOME/$ID/logs/1.log
+ FAILLOG=$'/home/gol/JASONID\r/logs/1.log'
echo $FAILLOG
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log
echo $HOME/$ID/logs/1.log
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log
0
Rui F Ribeiro 26 Янв 2019 в 19:21
3
У вас есть возврат каретки в файле, из которого вы получаете ID?
 – 
Eric Renouf
10 Май 2018 в 14:18
Да, это образец содержимого ID=JASONID SOL_SELECTED=1 DIRECTORY=YES, после каждого слова у меня есть возврат каретки
 – 
Jason
10 Май 2018 в 14:20
Добавьте вывод bash -vx your_script.sh к вашему вопросу.
 – 
Hauke Laging
10 Май 2018 в 14:20
1
\r - это их проблема, это часть значения ID, поэтому ваша замененная строка выглядит примерно как /home/gol/JSONID\r/logs/1.log, из-за чего /logs/1.log появляется поверх начала строки. нить
 – 
Eric Renouf
10 Май 2018 в 14:21
Вы правы, обновляя вопрос с помощью bash -vx
 – 
Jason
10 Май 2018 в 14:26

1 ответ

Лучший ответ

Как прокомментировал @EricRenouf, если все, что идет к ID, имеет возврат каретки (\r) в конце он исказит вывод, переместив курсор в начало строки, после чего остальные части перезапишут начальные части.

Использование printf %q для просмотра специальных символов:

ID=$'abcdef\r'
echo "$ID/123"
printf "%q\n" "$ID/123"

Мы получили:

/123ef
$'abcdef\r/123'

Вы можете использовать расширения параметров, чтобы удалить окончательный CR:

ID=${ID%$'\r'}
echo "$ID/123"
printf "%q\n" "$ID/123"

($'..' — нестандартный IIRC, но он работает в Bash и других.)

4
ilkkachu 10 Май 2018 в 14:24
Но могу ли я опустить «возврат каретки / r» при чтении? или удалить из самого файла?
 – 
Jason
10 Май 2018 в 14:29
1
@ Джейсон, о, конечно, конечно, вы также можете отредактировать входной файл с помощью чего-то вроде dos2unix или sed -i -e $'s/\r//' file
 – 
ilkkachu
10 Май 2018 в 14:36