Ошибка переменной каталога Bash - PullRequest
2 голосов
/ 02 июня 2011

В bash-скрипте я дохожу до этой точки

read ENE CX CY CZ <<< $(head -n 1 RESULTS_${lach}tal2)
echo $ENE
SED_ARG="-e 's/-/m/g'"
read CX2 <<< $( echo ${CX} | eval sed "$SED_ARG")
read CY2 <<< $( echo ${CY} | eval sed "$SED_ARG")
read CZ2 <<< $( echo ${CZ} | eval sed "$SED_ARG")
DIREC="${CX2}_${CY2}_${CZ2}"
echo $DIREC
cd "$DIREC"

значение переменной DIREC - это имя каталога, и я получаю такие вещи, как

m25.1240_m22.1250_m5.1540

этот каталог существуети если я сделаю это напрямую в bash cd m25.1240_m22.1250_m5.1540, это сработает, и я смогу войти внутрь.Но по сценарию это не работает и я получаю ошибку:

: No such file or directory: cd: m25.1240_m22.1250_m5.1540

Я не понимаю, почему ошибка

PS:

echo "$DIREC" | od -c

дает

0000000   m   2   5   .   1   2   4   0   _   m   2   2   .   1   2   5
0000020   0   _   m   5   .   1   5   4   0  \r  \n
0000033

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Есть ли в вашем файле RESULTS_${lach}tal2 окончания строк в стиле Windows? CZ заканчивается возвратом каретки? Что это показывает:

echo "$DIREC" | od -c

Кроме того, происходит много ненужных испытаний. Bash может делать замены в подстановке переменных:

read ENE CX CY CZ <<< $(head -n 1 RESULTS_${lach}tal2 | sed 's/\r$//')
DIREC="${CX/-/m}_${CY/-/m}_${CZ/-/m}"
1 голос
/ 02 июня 2011

Я подозреваю, что внутри скрипта, ваш рабочий каталог находится в другом месте, поэтому вы не можете cd.Попробуйте это: вместо

cd "$DIREC"

замените его на

echo current directory is $PWD
cd "m25.1240_m22.1250_m5.1540"

и посмотрите, не возникла ли у вас такая же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...