Можно проверить дважды, если ключ уже импортируется с помощью rpm -qi gpg-pubkey-<version>-<release>
. Если это будет установлено, то об/мин даст Вам всю информацию об этом, в противном случае это просто выйдет с возвращаемым значением 1, таким образом, Вы могли добавить к своему марионеточному рецепту unless
параметр:
exec { "rpm --import /path/to/package":
# ...
unless => "rpm -qi gpg-pubkey-<version>-<release> > /dev/null 2>&1"
}
Это должно работать приятно даже на сложные споры с пробелом и хуже:
#!/bin/bash
new_args=()
for arg
do
new_args+=( '-p' )
new_args+=( "$arg" )
done
for arg in "${new_args[@]}"
do
echo "$arg"
done
Тест:
$ ~/test.sh foo $'bar\n\tbaz bay'
-p
foo
-p
bar
baz bay
Поместите аргументы в массив и используйте замену шаблона удара относительно них с заменой массива и префиксом, соответствующим:
ARGS=("$@")
echo ${ARGS[@]/#/-p }
Это заменяет запуск каждого аргумента с -p<space>
.
К сожалению, это не работает правильно, если у Вас есть пробелы в Ваших аргументах. Пробелы сохраняются правильно с ARGS=("$@")
, но не, когда Вы делаете ${ARGS[@]/#/-p }
расширение. Можно поместить двойные кавычки вокруг того расширения, но затем Вы добираетесь -p arg1
как отдельный аргумент, не два аргумента.
Если Вам не нужно -p<space>
предварительно ожидаемый, просто -p
затем помещение двойных кавычек вокруг расширения должно хорошо работать. Эксперимент с и без двойных кавычек вокруг расширения для наблюдения, что работы лучше всего для Вас.
Можно сохранить пробелы в ${ARGS[@]/#/-p }
расширение, если Вы устанавливаете IFS
переменная к пустой строке!
# sample code
(
set -- 1 2 3 'arg with spaces' $'bar\n\tbaz bay'
printf 'oldIFS: %q\n' "$IFS"
IFS=""
#IFS=" "
printf 'newIFS: %q\n' "$IFS"
ARGS=("$@")
ARGS=( ${ARGS[@]/#/-p } )
for ((i=0; i < ${#ARGS[@]}; i++)); do
echo "$i: ${ARGS[i]}"
done
)
В функции можно ограничить объем измененного IFS
переменная к этой функции при помощи declare IFS=""
.
argparse() { ... }
функциональный блок - Это работает просто великолепно здесь. – l0b0 15.07.2011, 10:15xargs
на функции, но это фиксируется теперь;спасибо! – user541686 15.07.2011, 10:41