# emerge -optionswithnospaces category/package-name-version-x.y.z
Вы перепутали, пакет с категорией, которую я редактировал. Это приводит к ответу на ваш вопрос. Emerge
сам по себе не может создавать пакеты, используя подстановочные знаки категории,поскольку средство проверки зависимостей ожидает хотя бы один пакет.
Это оставляет нам два варианта:
app-portage/portage-utils
. Что-то близкое к emerge -av $(for name in $(qlist -IC | grep -v '^games-rpg/') etc etc
Лично я ненавижу этот метод, так как мне требуется время на его отладку. На этой бирже есть несколько отличных скрипторов, если вы решите пойти по этому пути. nano -w /etc/portage/sets/rpg-games
Добавьте следующее:
games-rpg/*
А потомemerge -av @rpg-games
Portage может расширить подстановочный знак, если подстановочный знак указан в наборе. Я считаю, что это работает с помощью буферной магии, но не цитируйте меня по этому поводу. Оболочка emerge разветвляет временный файл, перечисляет все элементы, выбранные подстановочным знаком, собирает список и отправляет его в качестве входных данных, а затем закрывает временный файл.
Чтобы узнать больше о подстановочных знаках и Portage, прочитайте раздел ГЛОССАРИЙ в man portage
. Вот онлайн-копия .
В Korn/POSIX -как оболочки, а "$@"
расширяется до всех позиционных параметров, разделенных (в контекстах списка ), "$*"
расширяется до конкатенации позиционных параметров с первым символом (байт с некоторыми оболочками )из $IFS
¹ или с SPC, если $IFS
не установлено, или без ничего, если $IFS
установлено на пустую строку.
И в ksh
/ zsh
/ bash
/yash
(Bourne -как оболочки с поддержкой массива ), это то же самое для "${array[@]}"
против "${array[*]}"
.
В zsh
"$array"
совпадает с "${array[*]}"
, а в ksh
/bash
совпадает с "${array[0]}"
. В yash
это то же самое, что и "${array[@]}"
.
В zsh
вы можете соединять элементы массива с произвольными разделителями с флагом раскрытия параметра j
:"${(j[ ])array}"
, например, для соединения по пробелу. Это не ограничивается строками из одного символа / байта, вы также можете, например, "${(j[ and ])array}"
и использовать флаг расширения параметра p
, чтобы иметь возможность использовать escape-последовательности или переменные в спецификации разделителя (, например "${(pj[\t])array}"
для соединения на TAB и "${(pj[$var])array}"
, чтобы присоединиться к содержимому$var
). См. также флаг быстрого доступа F
(, такой же, как pj[\n]
), для соединения с переводом строки -.
Так вот:
ores_simple_push() (
set -o errexit -o pipefail
git add.
git add -A
args=("$@")
if [[ ${#args[@]} -lt 1 ]]; then
args+=('squash-this-commit')
fi
IFS=' '
git commit -am "${args[*]}" || true
git push
)
Или просто POSIXly:
ores_simple_push() (
set -o errexit
git add.
git add -A
[ "$#" -gt 0 ] || set square-this-commit
IFS=' '
git commit -am "$*" || true
git push
)
С некоторыми оболочками (, включая bash, ksh93, mksh и bosh, но не с dash, zsh и yash ), здесь также можно использовать "${*-square-this-commit}"
.
Для полноты, в bash
, для объединения массивов с произвольными строками (для эквивалента zshjoined=${(ps[$sep])array}
)вы можете сделать:
IFS=
joined="${array[*]/#/$sep}"
joined=${joined#"$sep"}
(предполагается, что $sep
является допустимым текстом в локали; если нет, есть шанс, что второй шаг завершится ошибкой, если содержимое $sep
в конечном итоге сформирует допустимый текст при объединении с остальными ).
¹ Историческая справка: в оболочке Борнаони были объединены с SPC независимо от значения$IFS
На самом деле это работает, но я не знаю, почему:
git commit -am "${args}" || { echo; }