Как обрабатывать «-» в аргументах сценария оболочки?

Этот вопрос состоит из 3 частей, и каждая по отдельности проста, но объединить вместе - нетривиально (по крайней мере, для меня):)

Нужно написать сценарий, который должен принимать в качестве аргументов:

  1. один имя другой команды
  2. несколько аргументов для команды
  3. список файлов

Примеры:

./my_script head -100 a.txt b.txt ./xxx/*.txt
./my_script sed -n 's/xxx/aaa/' *.txt

и т. д.

Внутри моего скрипта по какой-то причине мне нужно различать

  • , что это за команда
  • каковы аргументы для команды
  • какие файлы

поэтому, вероятно, наиболее стандартный способ записи приведенных выше примеров:

./my_script head -100 -- a.txt b.txt ./xxx/*.txt
./my_script sed -n 's/xxx/aaa/' -- *.txt

Вопрос1: Есть ли здесь лучшее решение?

Обработка в ./my_script (первая попытка):

command="$1";shift
args=`echo $* | sed 's/--.*//'`
filenames=`echo $* | sed 's/.*--//'`

#... some additional processing ...

"$command" "$args" $filenames #execute the command with args and files

Это решение не сработает, если имена файлов будут содержать пробелы и / или '-', например
/ some - path / to / more / idiotic file name.txt

Question2: Как правильно получить $ command его $ args и $ filenames для последующего выполнения?

Вопрос 3: - как добиться следующего стиля выполнения?

echo $filenames | $command $args #but want one filename = one line (like ls -1)

Здесь хорошее решение оболочки или нужно использовать, например, perl?

5
задан jm666 25 May 2011 в 11:21
поделиться