Angenommen, ich habe veraltete Ports A, B, C, D, E, F und G. Nehmen Sie der Einfachheit halber an, dass alle "angefordert" sind.
Nach meinem besten Verständnis installiert MacPorts, wenn es ausgeführt wird ( sudo port upgrade outdated
), die Ports in einem Abhängigkeitsbaum, der in alphabetischer Reihenfolge sortiert ist. Es würde also die Ports in dieser Reihenfolge installieren: A, D, E, F, C, B.
Angenommen, Port A ist defekt. MacPorts beendet die Installation.
Ich sehe dies als eine Unannehmlichkeit an, da die anderen veralteten Ports sehr gut funktionieren könnten. Die Tatsache, dass A nicht installiert wird, hat keine Auswirkungen auf die anderen Ports. Da nun ein einzelner Port nicht installiert werden kann, sind alle anderen meiner Ports veraltet, bis dieser Port behoben ist.
Wie kann ich MacPorts anweisen, mit der Installation aller installierbaren Ports fortzufahren, die ohne Fehler installiert werden können?
Dies ist wahrscheinlich im Geiste dasselbe wie dieses : MacPorts: Installation anderer Updates nach Fehler fortsetzen . Ich kaufe die Antworten auf dieser Seite jedoch nicht:
-p
Flagge ist offensichtlich problematisch. Ich hätte gedacht, dass dies die Antwort auf diese Lösung wäre, aber mehrere Entwickler warnen Benutzer davor, es zu verwenden, es sei denn, sie verstehen wirklich, was es tut. Ich gehe lieber auf Nummer sicher.sudo port upgrade outdated and not A
. Dies funktioniert, wenn nur ein unabhängiger Port ausfällt, aber was ist, wenn zwei oder drei Ports (von Dutzenden) ausfallen? Könnte ich so etwas tun sudo port upgrade outdated and not A and not C and not E
(etc.)?Angenommen, es gibt zu viele Ports, die sie nicht einzeln ausschließen können. Nehmen Sie auch an, dass es zu viele Ports gibt, um sie einzeln zu aktualisieren.
Das ist, was ich benutze ... es ist vielleicht nicht schön, aber es funktioniert:
sudo bash -c 'for port in `port outdated 2>/dev/null | tail -n +2 | awk '\''{print $1}'\''` ; do echo -n "$port:" ; port -N upgrade $port 2>> /tmp/upgrade-ports.err >> /tmp/upgrade-ports.out && echo "✓" || echo "✕" ; done'
Lassen Sie es mich für Sie herunterbrechen:
Erstens möchten Sie sudo nicht in einer Schleife ausführen, da Sie sonst Ihr Passwort eingeben müssen. Um sudo zu vermeiden, habe ich die gesamte Schleife erhalten und sie in Anführungszeichen gesetzt (Alt+' in zsh ist sehr hilfreich, um die vorhandenen Anführungszeichen richtig zu umgehen) und sie dann mit ausgeführt sudo bash -c
. Alternativ kann man es auch in eine Datei packen und als Skript damit ausführensudo script
das lässt uns mit dieser Schleife:
for port in `port outdated 2>/dev/null | tail -n +2 | awk '{print $1}'` ; do echo -n "$port:" ; port -N upgrade $port 2>> /tmp/upgrade-ports.err >> /tmp/upgrade-ports.out && echo "✓" || echo "✕" ; done```
port outdated 2>/dev/null | tail -n +2 | awk '{print $1}'
(Tail entfernt die Zeile „Folgende installierte Ports sind veraltet:“)adwaita-icon-theme:✓
apr:✕
aquaterm:✓
HTH
* Zur Verdeutlichung bearbeitet. Das bedeutet, dass die Ausgabe in Ihrem Beispiel so aussehen würde:
A:✕
B:✓
C:✓
D:✓
E:✓
F:✓
G:✓
Aber B wird lange dauern und C, D, E und F werden sehr schnell sein, weil sie bereits während B aktualisiert wurden.
mmmmmm
mmmmmm
jvriesem
mmmmmm