Если Вы обращаетесь к параметрам командной строки (например, -d
-f2
, и в Вашем первом примере 'some.text'
), они все переходят к связанной программе.
Параметры командной строки могут также содержать информацию, которая указывает, куда произведенный переходит в, или вход прибывает из. Например, в первом примере присутствие имени файла указывает, что данные прибывают из файла, в то время как во втором примере отсутствие имени файла подразумевает вход от stdin
. В обоих случаях вывод переходит в stdout
.
Часто apt-get предпочтет удалить десятки пакетов вместо того, чтобы просто обновить пару других пакетов.
Обычно я запускаю aptitude в интерактивном режиме, выбираю пакет, который я хочу установить с помощью +, и затем проверяю, какие другие пакеты могут быть разбиты этим действием (переход к следующему «разбитому» пакету с помощью клавиши 'b'. Часто просто обновление этих (снова с +) разрешит проблему с небольшими хлопотами. Когда все разрешится, бей «г» за «иди и делай это.» Он покажет сводку того, что будет происходить (страница через полный список, это цветной код, чтобы помочь), а затем нажмите 'g' снова, когда удовлетворены.
-121--175571-Я не думаю, что это возможно. Ключевой проблемой здесь является то, что панель не становится активным окном при наведении на нее курсора мыши и не захватывает клавиатуру. Что означает, что он, вероятно, вообще не получает события клавиатуры.
См. также обсуждение , где предлагается обходной путь через xdotool
. Если вы решили пойти по той дороге, вы, вероятно, хотите сохранить положение мыши и восстановить его после всего сделано.
Это можно сделать с помощью пользовательского агента . Я не очень понимаю Arch упаковки или как dlagents работают, поэтому у меня есть только ответ на взлом, но это получает работу.
Идея состоит в том, чтобы изменить PKGBUILD для использования пользовательского агента загрузки. Я изменил источник
"${pkgname%-git}::git+http://github.com/Itseez/opencv.git"
на
"${pkgname%-git}::mygit://opencv.git"
, а затем определил новый агент, называемый mygit
, который выполняет клон неглубокого размера. Я сделал это, добавив в массив DLAGENTS
в /etc/makepkg.conf
следующий dlagent:
'mygit::/usr/bin/git clone --depth 1 http://github.com/Itseez/opencv.git'
Я думаю, что вы могли бы определить этот агент загрузки где-то еще, но я не знаю, как. Также обратите внимание, что клонируемый репозиторий жестко кодируется в команде. Опять же, этого, вероятно, можно избежать. Наконец, расположение загрузки не то, что ожидает PKGBUILD. Чтобы обойти это, я просто перемещаю репозиторий после его загрузки. Я делаю это, добавляя
mv "${srcdir}/../mygit:/opencv.git" "${srcdir}/../${pkgname%-git}"
в начале функции pkgver
.
Я думаю, что более чистым решением было бы выяснить, что git + http
dlagent делает и уточнить это временно. Это должно избежать всех аспектов взлома решения.
Согласно https://bugs.archlinux.org/task/23065 (предоставлено jasonwryan), добавление функции поверхностного клонирования в AUR PKGBUILD было элементом списка желаний, который был закрыто в субботу, 5 марта 2011 года, с комментарием:
Причина закрытия: Не будет реализовано
Это говорит о том, что этого не произойдет, если кто-то не отправит патч.
Как я предположил в комментариях автора, то, что он пытается сделать, почти наверняка можно выполнить, разбив процесс на два этапа:
Лично я модифицировал скрипт makepkg и он работает как шарм:
# vim `which makepkg` +/clone
...
541 msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542 if ! git clone --mirror "$url" "$dir"; then
543 error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
...
Добавление "-зеркала -одиночка -глубина 1" к команде "git-клон":
541 msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542 if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
543 error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
Вот другой вид:
--- makepkg ...
+++ makepkg-patched ...
@@ -539,7 +539,7 @@
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
- if ! git clone --mirror "$url" "$dir"; then
+ if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
plain "$(gettext "Aborting...")"
exit 1
Если вы не хотите изменять сценарии makepkg.
как описано здесь , укажите DEVELSRCDIR
в файле /etc/yaourtrc
или ~/.yaourtrc
на какую-либо постоянную папку. Тогда все проверки репозитория (git/svn/... )будут происходить в этой папке. После клонирования репозитория каждый раз вместо полного клонирования будет выполняться только быстрая выборка с новейшими версиями.
Извините, что отвечаю на вопрос, но мне не хватает ума, чтобы добавить комментарий.
Вдохновленный @StrongBad, я добавил новый протокол для makepkg
, и он выглядит некрасиво, но работает:
'sgit::/usr/bin/emacs --batch --eval (shell-command\ (concat\ \"git\ clone\ --depth=1\ \"\ (replace-regexp-in-string\ \"#\"\ \"\ --\"\ (substring\ \"%u\ \"\ 1))\ \"%o\"))'
Помимо Emacs, здесь можно использовать любой другой интерпретатор. Затем необходимо экранировать пустые места, чтобы их можно было рассматривать как один аргумент, и это то, что Bash не может архивировать.