Увеличение имени точки монтирования с помощью awk

Это происходит потому, что ваш global.shимеет формат файла DOS, который кодирует конец строки как возврат каретки, за которым следует символ новой строки.

Linux/Unix будет рассматривать только символ новой строки как новую строку, поэтому возврат каретки станет частью содержимого переменной ${CODE_DIR}.

Когда вы повторяете символ возврата каретки, курсор возвращается к началу строки. Вот что происходит в этом случае: сначала печатается /app001/Documents/files//codeиз ${CODE_DIR}, затем возврат каретки в конце этой переменной переместит курсор обратно в начало строки, а затем часть /SOMETHINGперезапишет начало строки.

Вы можете визуализировать это, направив вывод через cat -v, который будет отображать все символы, а возврат каретки будет отображаться как^M:

$./index.sh | cat -v
/app001/Documents/files//code^M/SOMETHING

Чтобы исправить это, преобразуйте новые строки в global.shв формат Unix, что вы можете сделать с помощью инструмента dos2unix, если он доступен на вашем компьютере.

$ dos2unix global.sh

Или откройте файл в Vim и конвертируйте его там:

$ vim global.sh
:set ff=dos
:wq

Вы можете проверить другие файлы (, такие как index.sh), на наличие окончаний строк DOS. Вы также можете проверить, почему global.shоказался с окончаниями файлов DOS, и исправить это. Если вы используете текстовый редактор для создания этих файлов, убедитесь, что текстовый редактор правильно настроен, чтобы всегда использовать окончания строк Unix.

1
13.10.2021, 22:46
1 ответ
$ awk -v base='/mnt/data_' 'sub(base,"") && ($1>max){max=$1} END{print base max+1}' file
/mnt/data_4
1
14.10.2021, 13:48

Теги

Похожие вопросы