bash: выполнение команд с пробелами в именах файлов
Иногда в качестве аргументов скрипту передаются имена файлов с пробелами. Пробелы, естественно, экранированы слешем \. Но, тем не менее, при подстановке аргумента в скрипте могут возникнуть проблемы. Например, если в такой скрипт передать имя файла с экранированными пробелами, это вызовет ошибку:
Тем не менее, если просто выполнить в консоли…
… то проблем не возникнет.
Используем в скрипте такой трюк: временно меняем глобальную переменную IFS (в ней содержатся образцы разделителей), сменив разделитель на \n. Теперь bash будет рассматривать строку в переменной $1 как единое целое.
Такой скрипт будет работать без проблем.
#!/bin/bash
rsync -avz /source/$1 rsync://192.168.0.1/dest/
Тем не менее, если просто выполнить в консоли…
rsync -avz /source/имя\ файла\ с\ пробелами rsync://192.168.0.1/dest/
… то проблем не возникнет.
Используем в скрипте такой трюк: временно меняем глобальную переменную IFS (в ней содержатся образцы разделителей), сменив разделитель на \n. Теперь bash будет рассматривать строку в переменной $1 как единое целое.
#!/bin/bash
tmpIFS=$IFS; IFS='\n'
rsync -avz /source/$1 rsync://192.168.0.1/dest/
IFS=$tmpIFS
Такой скрипт будет работать без проблем.
- —
- 10 августа 2011, 17:21
Комментарии (4)
RSS свернуть / развернутьyababay
durman
yababay
Sergei_T
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.