Длинный путь запускает вывод ошибок bash, если ошибка цикла - PullRequest
0 голосов
/ 17 октября 2019

Я получаю ошибку при запуске приведенного ниже кода. Если я grep от $ file1, то скрипт не работает. Если я получаю grep из $ file2, то скрипт работает.

и $ file1, и $ file2 имеют одинаковые разрешения и одинаковое содержимое. Но почему я получаю сообщение об ошибке, когда я grep из $ file1? Здесь есть какая-нибудь синтаксическая ошибка?

#./test.sh
./test.sh: line 23: $'true\r': command not found


$ cat /tmp/file.conf
random=true
abac
daccda
qwerty=
aewwrwr=false

script

file1="/app/some/directory/apache-tomcat-9.0.10/webapps/DESDv2.0/WEB-INF/classes/file.conf"
file2="/tmp/file.conf"

findfile=` grep "random" $file1 | awk -F = '{print $2}' `


if $findfile;then
echo "enabled";
else
echo "disabled";
fi

Фактический вывод

$ ./test.sh
./test.sh: line 23: $'true\r': command not found

Ожидаемый вывод

$ ./test.sh
enabled

1 Ответ

0 голосов
/ 17 октября 2019

Я думаю, что ваш файл1 и файл2 разные. Чтобы проверить это, просто наберите:

cksum $file1 $file2

Они должны иметь одинаковую длину и одинаковую контрольную сумму. Если нет, то они разные.

Я также предполагаю, что ваши два файла имеют разные соглашения о конце строки: file1 имеет окончания строки DOS (конец строки 2 байта, т.е.), и file2 имеет конец строки Unix (конец строки одного байта, т.е.).

Когда вы открываете их в редакторе, они могут выглядеть одинаково. На самом деле, представление окончания строки отличается. Unix обрабатывает так же, как другие символы, и поэтому с этим дополнительным символом «true» становится «true \ r», и он не может найти команду с именем «true \ r».

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