Как работать с символьными файлами Умалута в операторах условия в сценариях оболочки - PullRequest
0 голосов
/ 17 июня 2020

Мой сценарий выполнит некоторую проверку, скопирует и переместит файлы в папки назначения, но сценарий не работает, если у нас есть файлы символов умлаута.

grep, cat, cp, lsof и условия не интерпретируются правильно при выполнении скрипта. PF ниже сценария ios для справки.

Vermögensausweis отображается, как показано ниже

для t в '"$ FILELIST"' cp -p $ '/ opt / DOC04 / input / 2019-11-01_ Verm \ 366gensausweis_per ** ****. 9887768769.pdf '

cat $'. / 22019-11-01_ Verm \ 303 \ 266gensausweis_per ******. 9887768769.pdf.inp '

lsof $' / opt / DOC04 / input / 2019-11-01_ Verm \ 366gensausweis_per ******. 9887768769.pdf '

grep '^ F' $ '. /. / 22019-11-01_ Verm \ 303 \ 266gensausweis_per ******. 9887768769.pdf.inp '

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

Спасибо за ответ

Скрипт отлично работает для других файлов без специальных символов (умляут). мы сталкиваемся с проблемой, когда файлы содержат символы умлаута. скопировал частичный сценарий. если хотите, я могу опубликовать сценарий.

Строки ниже - подробный вывод сценария.

cp -p $ '/ opt / DOC04 / input / 2019-11-01_ Verm \ 366gensausweis_per ******. 9887768769.pdf '

cat $ '. / 22019-11-01_ Verm \ 303 \ 266gensausweis_per ******. 9887768769.pdf.inp '

lsof $' / opt / DOC04 / input / 2019-11-01_ Verm \ 366gensausweis_per ******. 9887768769.pdf '

0 голосов
/ 17 июня 2020

Это проблема:

for t in '"$FILELIST"'

... потому что $t не будет списком, это будет литерал. Демо:

FILELIST="'foo~* bar' baz"
for t in '"$FILELIST"' ; do echo "$t" ; done

Вывод, это не список, это литерал:

"$FILELIST"

Проблема в том, что обычная переменная не является хорошим выбором для хранения массива с метасимволами в кавычках . Для обычного сценария оболочки использование set -- и "${@}" должно работать:

set -- 'foo~* bar' baz ; for t in "${@}" ; do echo "$t" ; done

Вывод:

foo~* bar
baz
...