Найдите имеет -exec
оператор, который выполняет произвольную команду. Еще лучше, -exec
тест, таким образом, можно объединить несколько в цепочку -exec
s вместе, и если более ранние команды перестали работать, более поздние не будут выполняться. Строка {}
заменяется текущим именем файла, и ;
отмечает конец команды. Необходимо заключить обоим в кавычки для предотвращения вмешательства оболочки.
Так:
find . -type f \
-exec grep -q 'Ms. Johnson' '{}' \; \
-exec sed -i'.bup' -e's/Ms. Johnson/Mrs. Melbin/g' '{}' \;
Это типично для программ, чтобы вынудить "some_string" часть быть последним аргументом так, чтобы .abc.ksh "some_string" -a "sample text"
ошибка. Если Вы делаете это, то после парсинга опций, $OPTIND
содержит индекс к последнему аргументу ( "some_string"
часть).
Если это не приемлемо, то можно проверить вначале (перед вводом while
видеть, существует ли неснабженный префиксом аргумент. Это позволит Вам иметь "some_string"
вначале и в конце. Если бы у Вас должен был быть он в середине, то Вы не могли бы или использовать getopts
или у Вас могло быть два набора getopts
. Когда первая ошибка, это могло произойти из-за неснабженного префиксом аргумента; получите его и запустите новое getopts
получить остающийся args. Или можно пропустить getopts все вместе и решение для самокрутки.
После получения Ваших опций
shift $OPTIND
if [ $# -eq 1 ]; then
some_str="$1"
else
echo "Error: missing argument" >&2
fi
./abc.ksh "some_string" -a "sample text"
, это не будет работать.
– chanchal1987
08.03.2011, 14:18