Этот вопрос состоит из 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?