Обычные пакеты собираются из стабильных версий или стабильных тегов git репозитория. Программа компилируется на компьютере пользователя, а затем устанавливается. Это займет время.
Пакеты с суффиксом -bin
уже собраны вышестоящим сопровождающим и где-то доступны. Таким образом, пользователям не нужно компилировать пакет на своей машине. Скрипт PKGBUILD
загружает, извлекает и устанавливает файлы. Некоторое проприетарное программное обеспечение выпускается в этом формате, где исходный код недоступен.
Пакеты с суффиксом -git
собираются из последней фиксации из репозитория git, независимо от того, является она стабильной или нет. Таким образом, пользователь получает последние исправления или исправления. Это также скомпилировано на пользовательской машине, а затем установлено.
Различие между пакетами AUR можно легко понять из их соответствующего PKGBUILD
файла (сценария оболочки, такого как )в функции source()
. Вот пример:
github-desktop
источником является стабильный git релиз тег:pkgver=x.y.z
_pkgver="${pkgver}-linux1"
gitname="release-${_pkgver}"
https://github.com/shiftkey/desktop.git#tag=${gitname}
github-desktop-bin
источником является уже упакованный пакет Debian:pkgver=x.y.z
_pkgver="${pkgver}-linux1"
gitname="release-${_pkgver}"
https://github.com/shiftkey/desktop/releases/download/${gitname}/GitHubDesktop-linux-${_pkgver}.deb
github-desktop-git
источником является последний мастер ветвь:https://github.com/shiftkey/desktop.git
В xargs -I replstr utility arguments
, POSIX требует , чтобы replstr
заменялся только в arguments
, а не utility
. GNU xargs
соответствует требованиям в этом отношении (busybox xargs
не соответствует ).
Чтобы обойти это, вы можете использовать env
как утилиту:
which -a... | xargs -I cmd xargs env cmd --version
(подавляет начальные пробелы, обратную косую черту, одинарные кавычки, двойные кавычки, новую строку, возможно, последовательности байтов и не формирует допустимые символы из-за того, как xargs
интерпретирует свой ввод ).
Или лучше:
for cmd in (which -a...)
$cmd --version
end
Что ограничивало бы проблемные символы в именах файлов только новой строкой.
В любом случае, вы не можете и не хотите использовать здесь eval
. eval
это встроенная в оболочку (специальная встроенная в оболочки POSIX команда )для интерпретации кода оболочки, а не для запуска команд. xargs
— это внешняя команда оболочки,поэтому он не может запускать встроенные функции вашей оболочки или любой другой оболочки без запуска интерпретатора этой оболочки, например:
which -a... |
xargs -rd '\n' sh -c 'for cmd do "$cmd" --version; done' sh
Использование sh
вместо fish
здесь, поскольку встроенные скрипты AFAIK fish
не могут принимать аргументы. Но все же не с использованием eval
здесь, что не имело бы смысла, поскольку мы не хотим, чтобы эти имена файлов интерпретировались как код оболочки.
Также используется -rd '\n'
, который специфичен для GNU -, но не имеет всех проблем -I
, для передачи полного содержимого всех строк в качестве отдельных аргументов утилите (здесьsh
).