Supongamos que tengo los puertos A, B, C, D, E, F y G obsoletos. Supongamos, por simplicidad, que todos ellos están "solicitados".
Según tengo entendido, cuando MacPorts se ejecuta ( sudo port upgrade outdated
), instala los puertos en un árbol de dependencia ordenado por orden alfabético. Entonces, instalaría los puertos en este orden: A, D, E, F, C, B.
Supongamos que el puerto A está roto. MacPorts deja de instalar.
Veo esto como un inconveniente, porque los otros puertos obsoletos podrían estar funcionando bien. El hecho de que A no se instale no tiene ningún efecto en ninguno de los otros puertos. Ahora, debido a que un solo puerto no se instalará, el resto de mis puertos están desactualizados hasta que se solucione este puerto.
¿Cómo puedo decirle a MacPorts que continúe instalando todos los puertos instalables que puede instalar sin error?
Este es probablemente el mismo que este en espíritu : MacPorts: Continúe instalando otras actualizaciones después del error . Sin embargo, no compro las respuestas en esa página:
-p
bandera es evidentemente problemática. Hubiera pensado que esa sería la respuesta a esta solución, pero varios desarrolladores advierten a los usuarios que no la usen a menos que realmente entiendan lo que hace. Prefiero ir a lo seguro.sudo port upgrade outdated and not A
_ Esto funciona si solo falla un puerto independiente, pero ¿qué pasa si tengo dos o tres puertos (de docenas) que fallan? ¿Podría hacer algo como, sudo port upgrade outdated and not A and not C and not E
(etc.)?Supongamos que hay demasiados puertos que no los excluyen individualmente. Suponga también que hay demasiados puertos para actualizarlos individualmente.
Esto es lo que uso... puede que no sea bonito, pero funciona:
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'
Déjame desglosarlo por ti:
primero, no desea sudo en un bucle, de lo contrario, debe seguir poniendo su contraseña. Para evitar sudo, obtuve todo el bucle y lo cité (Alt+' en zsh es muy útil para escapar correctamente de las comillas existentes) y luego lo ejecuté con sudo bash -c
. Alternativamente, puede ponerlo en un archivo y ejecutarlo como un script consudo script
eso nos deja con este bucle:
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}'
(la cola elimina la línea "Los siguientes puertos instalados están desactualizados:")adwaita-icon-theme:✓
apr:✕
aquaterm:✓
HTH
*Editado para aclarar. Esto significa que en su ejemplo, la salida se vería así:
A:✕
B:✓
C:✓
D:✓
E:✓
F:✓
G:✓
Pero B tardará MUCHO tiempo, y C, D, E y F serán muy rápidos porque ya se han actualizado durante B.
mmmmmm
mmmmmm
jvriesem
mmmmmm