<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>brew &amp;mdash; Cyberdyne Systems</title>
    <link>https://noblogo.org/aytin/tag:brew</link>
    <description>&#34;Fare o non fare. Non c&#39;è provare!&#34;</description>
    <pubDate>Thu, 30 Apr 2026 12:51:10 +0000</pubDate>
    <item>
      <title>Ancora su brew [upgrade]</title>
      <link>https://noblogo.org/aytin/ancora-su-brew-upgrade</link>
      <description>&lt;![CDATA[(pubblicato il 14 aprile 2021)&#xA;Photo by Mati Mango on Pexels.com&#xA;smalliPhoto by Mati Mango on a href=&#34;https://www.pexels.com/it-it/foto/persona-in-camicia-a-maniche-lunghe-nera-utilizzando-macbook-air-6330644/&#34;Pexels.com/a/i/small&#xA;&#xA;Faccio un po’ d’ordine rispetto all’ultimo post.&#xA;&#xA;brew ha “fattorizzato” la fase di aggiornamento.&#xA;&#xA;Non sono più disponibili le istruzioni esplicite di gestione dei cask perché l’update / upgrade ora comprende formule e cask rendendo il tutto molto più coerente. Quindi:&#xA;!--more--&#xA;&#xA;brew update : Aggiorna il database interno sulle nuove versioni disponibili per formule e cask&#xA;brew upgrade : Aggiorna formule e cask&#xA;brew upgrade --cask : Aggiorna solo i cask&#xA;&#xA;Per quel che riguarda i cask, sappiamo che l’upgrade di brew uprende in considerazione solo i cask che non dispongono della funzionalità di biautoupdate/i/b o che hanno bilatest/i/b come versione./u&#xA;&#xA;Per forzare l’aggiornameno dei cask residui basta una singola istruzione:&#xA;brew upgrade --cask -n --greedy|tail -n +2|grep -v latest|cut -d &#34; &#34; -f 1|xargs brew upgrade --cask&#xA;Aggiorna esplicitamente tutti i cask con autoupdate (esclusi i “latest”)&#xA;&#xA;#brew #bash #macos #scripting]]&gt;</description>
      <content:encoded><![CDATA[<p><strong><em>(pubblicato il 14 aprile 2021)</em></strong>
<img src="https://pixelfed.uno/storage/m/_v2/489827599091373610/42a8ecf32-5a8865/ja1LyaRcn7jS/NM0AI07Y3zsdIZt8bOnBixTprjbfQEbpC5KnqLEQ.jpg" alt="Photo by Mati Mango on Pexels.com">
<small><i>Photo by Mati Mango on <a href="https://www.pexels.com/it-it/foto/persona-in-camicia-a-maniche-lunghe-nera-utilizzando-macbook-air-6330644/" rel="nofollow">Pexels.com</a></i></small></p>

<p>Faccio un po’ d’ordine rispetto <a href="https://noblogo.org/aytin/effettuare-un-brew-upgrade-completo" rel="nofollow">all’ultimo post</a>.</p>

<p><strong>brew</strong> ha “fattorizzato” la fase di aggiornamento.</p>

<p>Non sono più disponibili le istruzioni esplicite di gestione dei cask perché l’update / upgrade ora comprende formule e cask rendendo il tutto molto più coerente. Quindi:
</p>
<ul><li><code>brew update</code> : Aggiorna il database interno sulle nuove versioni disponibili per formule e cask</li>
<li><code>brew upgrade</code> : Aggiorna formule e cask</li>
<li><code>brew upgrade --cask</code> : Aggiorna solo i cask</li></ul>

<p>Per quel che riguarda i cask, sappiamo che l’upgrade di brew <u>prende in considerazione solo i cask che non dispongono della funzionalità di <b><i>autoupdate</i></b> o che hanno <b><i>latest</i></b> come versione.</u></p>

<p>Per forzare l’aggiornameno dei cask residui basta una singola istruzione:</p>

<pre><code class="language-bash">brew upgrade --cask -n --greedy|tail -n +2|grep -v latest|cut -d &#34; &#34; -f 1|xargs brew upgrade --cask
</code></pre>
<ul><li>Aggiorna esplicitamente tutti i cask con autoupdate (esclusi i “latest”)</li></ul>

<p><a href="/aytin/tag:brew" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">brew</span></a> <a href="/aytin/tag:bash" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">bash</span></a> <a href="/aytin/tag:macos" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">macos</span></a> <a href="/aytin/tag:scripting" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">scripting</span></a></p>
]]></content:encoded>
      <guid>https://noblogo.org/aytin/ancora-su-brew-upgrade</guid>
      <pubDate>Wed, 01 Mar 2023 06:17:35 +0000</pubDate>
    </item>
    <item>
      <title>Effettuare un brew upgrade completo</title>
      <link>https://noblogo.org/aytin/effettuare-un-brew-upgrade-completo</link>
      <description>&lt;![CDATA[(pubblicato il 25 marzo 2021)&#xA;laptop&#xA;smalliPhoto by olia danilevich on a href=&#34;https://www.pexels.com/it-it/foto/mani-scrivania-laptop-internet-4974912/&#34;Pexels.com/a/i/small&#xA;&#xA;Sul Mac trovo comodo usare brew . Permette di gestire tante applicazioni con un gestore di pacchetti.&#xA;&#xA;Nota positiva: in generale, funziona bene, per quello che lo conosco.&#xA;Nota negativa: in contraddizione col punto precedente, l’upgrade dei cask mi pare faccia cilecca a id=&#34;linknota1&#34; href=&#34;#nota1&#34; title=&#34;vai alla nota 1&#34;strongsup[1]/sup/strong/a&#xA;&#xA;In passato, eseguivo l’update / upgrade delle formule e l’upgrade dei cask.&#xA;!--more--&#xA;Col tempo, la gestione dei cask è diventata più omogenea con quella delle formule ma l’update / upgrade mi rimane ancora un po’ misterioso.&#xA;&#xA;Eseguendo un brew update &amp;&amp; brew upgrade, soprattutto dalle ultime versioni (dalla 3.0.7 in poi di sicuro), l’update sembra fare il suo lavoro e trova un po’ di cask aggiornare.&#xA;&#xA;Càpita però che l’upgrade ne aggiorni qualcuno, un brew upgrade --cask ne aggiorni qualcun altro (senza raggiungere il totale iniziale) e provando a rifare l’update subito dopo (e anche l’upgrade) il sistema rimane intatto come se fosse up-to-date.&#xA;&#xA;Agendo puntualmente sul cask invece, l’aggiornamento parte eccome. Come se fossero rimaste in cache delle informazioni discordanti sullo stato reale dell’applicazione e su quello potenziale.&#xA;&#xA;Ho cercato un po’ in rete, sembra un problema comune.&#xA;&#xA;Al solito, è partito lo script.&#xA;!/usr/bin/bash&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m**************\033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m brew update \033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m***********\033[0m&#34;&#xA;brew update&#xA; &#xA; &#xA;echo -e &#34;\n&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m************\033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m brew upgrade \033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m************\033[0m&#34;&#xA;if [[ -z $(brew upgrade) ]]; then&#xA;    echo -e &#34;Nothing.&#34;&#xA;fi&#xA; &#xA; &#xA;echo -e &#34;\n&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m*******************\033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m brew upgrade --cask \033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m*********************\033[0m&#34;&#xA;for c in $(brew list --cask -1); do&#xA;    printf %-30s &#34;$c&#34;&#xA;    info=$(brew info --cask &#34;$c&#34;)&#xA;     &#xA;    currentver=$(head -n1 &lt;&lt;&lt; &#34;$info&#34; | cut -d &#34; &#34; -f 2)&#xA;    installedver=$(head -n3 &lt;&lt;&lt; &#34;$info&#34; | tail -n1 | cut -d&#34;/&#34; -f 6 | cut -d &#34; &#34; -f 1)&#xA;     &#xA;    if [ &#34;$installedver&#34; != &#34;$currentver&#34; ]; then&#xA;        answer=&#34;&#34;&#xA;        while [[ -z $answer ]]; do&#xA;         &#xA;        read -r -p &#34;$c installed version is &#39;$installedver&#39;, but the current version is &#39;$currentver&#39;. Do you want to upgrade $c? [&#34;$&#39;\e[;32;1mYES\e[0m/no] &#39; answer&#xA; &#xA;        case ${answer,,} in&#xA;            yes|&#34;&#34;)&#xA;                brew upgrade --cask --force $c&#xA;                answer=&#34;yes&#34;&#xA;                ;;&#xA;            no)&#xA;                echo &#34;Installation of $c $currentver skipped&#34;&#xA;                ;;&#xA;            )&#xA;                answer=&#34;&#34;&#xA;                ;;&#xA;            esac&#xA;        done&#xA;    else&#xA;        printf &#34;: \033[38;5;70mis up-to-date (ver. $installedver)\033[0m\n&#34;&#xA;    fi&#xA;done&#xA; &#xA; &#xA;echo -e &#34;\n&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m***************\033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m brew cleanup \033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m************\033[0m&#34;&#xA;if [[ -z $(brew cleanup) ]]; then&#xA;    echo -e &#34;Nothing.&#34;&#xA;fi&#xA; &#xA; &#xA;echo -e &#34;\n&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m***********\033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m brew doctor \033[0m&#34;&#xA;echo -e &#39;\E[37;44m&#39;&#34;\033[1m***********\033[0m&#34;&#xA;brew doctor&#xA;Al di là dello zucchero sintattico, la soluzione è stata brutale e ruvida: un ciclo sulla lista dei cask con il force sull’upgrade (righe 21-50). La cosa ancora più singolare è che in questo modo vengono aggiornati dei cask che non risultavano nemmeno nel primo upgrade.&#xA;&#xA;Sicuramente si potrà fare anche meglio. a id=&#34;linknota2&#34; href=&#34;#nota2&#34; title=&#34;vai alla nota 2&#34;strongsup[2]/sup/strong/a&#xA;&#xA;Ho provato a usare brew livecheck per recuperare più elegantemente le info nelle righe 25-26 ma mi dà qualche problema, ogni tanto va in crash. Ho optato per la scansione secca della lista.&#xA;Non so bene come lavori brew outdated, se soffra degli stessi problemi degli altri comandi (sospetto di sì ma devo verificare).&#xA;In realtà basterebbe una sola riga:&#xA;&#xA;brew list --cask|xargs brew upgrade --cask&#xA;solo che così non riesco a controllare il numero di versione causando un aggiornamento quasi sempre inutile per tutti quei cask che hanno come versione “latest” (come Cisco Webex)&#xA;&#xA;Lo script fa il suo lavoro ma ho trovato anche questa alternativa (decisamente più elegante): https://github.com/buo/homebrew-cask-upgrade&#xA;&#xA;Un comando esterno, brew cu nella sua forma compatta, che sostituisce ed estende le funzionalità di brew upgrade. Avendo aggiornato da poco, non l’ho ancora visto all’opera.&#xA;Edit (31/03/2021):&#xA;&#xA;In realtà, leggendo anche il man e il log dell’applicazione su stdout, ho capito che il funzionamento di brew è corretto.&#xA;&#xA;upgrade e outadated prendono in esame solo i cask che non dispongono di autoupdate.&#xA;&#xA;  ==  Casks with ‘autoupdates’ or ‘version :latest’ will not be upgraded; pass \-\-greedy to upgrade them.&#xA;&#xA;Un atteggiamento prudenziale che è facile comprendere. Laddove sia disponibile una funzionalità di autoupdate, si preferisce che sia l’applicazione stessa a gestire questo aspetto, lasciando a brew upgrade --cask (e ai file .rb di configurazione del cask, di conseguenza) la gestione di tutto il resto.&#xA;&#xA;In questo modo, i cask che possono autoaggiornarsi, possono farlo in autonomia appena possibile, senza dipendere dalla modifica necessaria al file di configurazione che innesca l’aggiornamento.&#xA;&#xA;Volendo bypassare questo comportamento, si può ricorrere all’opzione \-\-greedy che forza l’upgrade sia per le app con autoupdate che per quelle che gestiscono il numero di versione con l’orrendo “latest”&#xA;&#xA;Quindi:&#xA;brew outdated --greedy --cask&#xA;e&#xA;brew upgrade --greedy --cask&#xA;permettono rispettivamente:&#xA;&#xA;di elencare tutti i cask che necessitano di un aggiornamento, compresi quelli con autoupdate e con versione “latest”&#xA;di forzare l’aggiornamento dei cask di cui sopra&#xA;&#xA;Forzando l’aggiornamento in questo modo, si potrà andare incontro ad un disallineamento, tipo:&#xA;&#xA;sul sistema può essere presente una versione più aggiornata di quanto non dica il file di configurazione&#xA;affidandosi all’autoupdate, l’opzione \-\-greedy* continuerà a rilevare comunque un aggiornamento da fare (ecco perché brew preferisce ignorare questo tipo di applicazioni)&#xA;&#xA;small&#xA;strongN.B./strong brew cu funziona benissimo permettendo di gestire separatamente sia l’autoupdate che il latest&#xA;/small&#xA;&#xA;ustrongNote all’articolo/strong/usmall&#xA;&#xA;No, non fa cilecca stronga id=&#34;nota1&#34; title=&#34;torna su&#34; href=&#34;#linknota1&#34;[↵]/a/strong&#xA;Ho fatto fuori il ciclo (e non solo) proprio qui stronga id=&#34;nota2&#34; title=&#34;torna su&#34; href=&#34;#linknota2&#34;[↵]/a/strong&#xA;&#xA;/small&#xA;&#xA;#brew #bash #macos #scripting&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><strong><em>(pubblicato il 25 marzo 2021)</em></strong>
<img src="https://pixelfed.uno/storage/m/_v2/489827599091373610/0fca8ea69-e1c06b/qPu12dRqXK5V/RhP4EHFheAGL3fhsyauMOhKchuWociC9TU3SmuoI.jpg" alt="laptop">
<small><i>Photo by olia danilevich on <a href="https://www.pexels.com/it-it/foto/mani-scrivania-laptop-internet-4974912/" rel="nofollow">Pexels.com</a></i></small></p>

<p>Sul Mac trovo comodo usare <strong>brew</strong> . Permette di gestire tante applicazioni con un gestore di pacchetti.</p>
<ul><li><strong>Nota positiva:</strong> in generale, funziona bene, per quello che lo conosco.</li>
<li><strong>Nota negativa:</strong> in contraddizione col punto precedente, l’upgrade dei cask mi pare faccia cilecca <a id="link_nota_1" href="#nota_1" title="vai alla nota 1" rel="nofollow"><strong><sup>[1]</sup></strong></a></li></ul>

<p>In passato, eseguivo l’update / upgrade delle formule e l’upgrade dei cask.

Col tempo, la gestione dei cask è diventata più omogenea con quella delle formule ma l’update / upgrade mi rimane ancora un po’ misterioso.</p>

<p>Eseguendo un <code>brew update &amp;&amp; brew upgrade</code>, soprattutto dalle ultime versioni (dalla 3.0.7 in poi di sicuro), l’update sembra fare il suo lavoro e trova un po’ di cask aggiornare.</p>

<p>Càpita però che l’upgrade ne aggiorni qualcuno, un <code>brew upgrade --cask</code> ne aggiorni qualcun altro (senza raggiungere il totale iniziale) e provando a rifare l’update subito dopo (e anche l’upgrade) il sistema rimane intatto come se fosse up-to-date.</p>

<p>Agendo puntualmente sul cask invece, l’aggiornamento parte eccome. Come se fossero rimaste in cache delle informazioni discordanti sullo stato reale dell’applicazione e su quello potenziale.</p>

<p>Ho cercato un po’ in rete, sembra un problema comune.</p>

<p>Al solito, è partito lo script.</p>

<pre><code class="language-bash">#!/usr/bin/bash
echo -e &#39;\E[37;44m&#39;&#34;\033[1m***************\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m* brew update *\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m***************\033[0m&#34;
brew update
 
 
echo -e &#34;\n&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m****************\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m* brew upgrade *\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m****************\033[0m&#34;
if [[ -z $(brew upgrade) ]]; then
    echo -e &#34;Nothing.&#34;
fi
 
 
echo -e &#34;\n&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m***********************\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m* brew upgrade --cask *\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m***********************\033[0m&#34;
for c in $(brew list --cask -1); do
    printf %-30s &#34;$c&#34;
    info=$(brew info --cask &#34;$c&#34;)
     
    current_ver=$(head -n1 &lt;&lt;&lt; &#34;$info&#34; | cut -d &#34; &#34; -f 2)
    installed_ver=$(head -n3 &lt;&lt;&lt; &#34;$info&#34; | tail -n1 | cut -d&#34;/&#34; -f 6 | cut -d &#34; &#34; -f 1)
     
    if [ &#34;$installed_ver&#34; != &#34;$current_ver&#34; ]; then
        answer=&#34;&#34;
        while [[ -z $answer ]]; do
         
        read -r -p &#34;$c installed version is &#39;$installed_ver&#39;, but the current version is &#39;$current_ver&#39;. Do you want to upgrade $c? [&#34;$&#39;\e[;32;1mYES\e[0m/no] &#39; answer
 
        case ${answer,,} in
            yes|&#34;&#34;)
                brew upgrade --cask --force $c
                answer=&#34;yes&#34;
                ;;
            no)
                echo &#34;Installation of $c $current_ver skipped&#34;
                ;;
            *)
                answer=&#34;&#34;
                ;;
            esac
        done
    else
        printf &#34;: \033[38;5;70mis up-to-date (ver. $installed_ver)\033[0m\n&#34;
    fi
done
 
 
echo -e &#34;\n&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m****************\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m* brew cleanup *\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m****************\033[0m&#34;
if [[ -z $(brew cleanup) ]]; then
    echo -e &#34;Nothing.&#34;
fi
 
 
echo -e &#34;\n&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m***************\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m* brew doctor *\033[0m&#34;
echo -e &#39;\E[37;44m&#39;&#34;\033[1m***************\033[0m&#34;
brew doctor
</code></pre>

<p>Al di là dello zucchero sintattico, la soluzione è stata brutale e ruvida: un ciclo sulla lista dei cask con il force sull’upgrade (righe 21-50). La cosa ancora più singolare è che in questo modo vengono aggiornati dei cask che non risultavano nemmeno nel primo upgrade.</p>

<p>Sicuramente si potrà fare anche meglio. <a id="link_nota_2" href="#nota_2" title="vai alla nota 2" rel="nofollow"><strong><sup>[2]</sup></strong></a></p>
<ol><li>Ho provato a usare <code>brew livecheck</code> per recuperare più elegantemente le info nelle righe 25-26 ma mi dà qualche problema, ogni tanto va in crash. Ho optato per la scansione secca della lista.</li>
<li>Non so bene come lavori <code>brew outdated</code>, se soffra degli stessi problemi degli altri comandi (sospetto di sì ma devo verificare).</li>
<li>In realtà basterebbe una sola riga:</li></ol>

<pre><code class="language-bash">brew list --cask|xargs brew upgrade --cask
</code></pre>

<p>solo che così non riesco a controllare il numero di versione causando un aggiornamento quasi sempre inutile per tutti quei cask che hanno come versione “latest” (come Cisco Webex)</p>

<p>Lo script fa il suo lavoro ma ho trovato anche questa alternativa (decisamente più elegante): <a href="https://github.com/buo/homebrew-cask-upgrade" rel="nofollow">https://github.com/buo/homebrew-cask-upgrade</a></p>

<p>Un comando esterno, <code>brew cu</code> nella sua forma compatta, che sostituisce ed estende le funzionalità di <code>brew upgrade</code>. Avendo aggiornato da poco, non l’ho ancora visto all’opera.</p>

<h2 id="edit-31-03-2021">Edit (31/03/2021):</h2>

<p>In realtà, leggendo anche il man e il log dell’applicazione su stdout, ho capito che il funzionamento di brew è corretto.</p>

<p><em>upgrade</em> e <em>outadated</em> prendono in esame solo i cask che <strong>non dispongono di autoupdate</strong>.</p>

<blockquote><p>==&gt; Casks with ‘auto_updates’ or ‘version :latest’ will not be upgraded; pass --greedy to upgrade them.</p></blockquote>

<p>Un atteggiamento prudenziale che è facile comprendere. Laddove sia disponibile una funzionalità di autoupdate, si preferisce che <strong>sia l’applicazione stessa a gestire questo aspetto</strong>, lasciando a <code>brew upgrade --cask</code> (e ai file .rb di configurazione del cask, di conseguenza) la gestione di tutto il resto.</p>

<p>In questo modo, i cask che possono autoaggiornarsi, possono farlo in autonomia appena possibile, senza dipendere dalla modifica necessaria al file di configurazione che innesca l’aggiornamento.</p>

<p>Volendo bypassare questo comportamento, si può ricorrere all’opzione <em>--greedy</em> che forza l’upgrade sia per le app con autoupdate che per quelle che gestiscono il numero di versione con l’orrendo “latest”</p>

<p>Quindi:</p>

<pre><code class="language-bash">brew outdated --greedy --cask
</code></pre>

<p>e</p>

<pre><code class="language-bash">brew upgrade --greedy --cask
</code></pre>

<p>permettono rispettivamente:</p>
<ul><li>di elencare <strong>tutti</strong> i cask che necessitano di un aggiornamento, compresi quelli con autoupdate e con versione “latest”</li>
<li>di forzare l’aggiornamento dei cask di cui sopra</li></ul>

<p>Forzando l’aggiornamento in questo modo, si potrà andare incontro ad un disallineamento, tipo:</p>
<ul><li>sul sistema può essere presente una versione più aggiornata di quanto non dica il file di configurazione</li>
<li>affidandosi all’autoupdate, l’opzione <em>--greedy</em> continuerà a rilevare comunque un aggiornamento da fare (ecco perché brew preferisce ignorare questo tipo di applicazioni)</li></ul>

<p><small>
<strong>N.B.</strong> <code>brew cu</code> funziona benissimo permettendo di gestire separatamente sia l’autoupdate che il latest
</small></p>

<p><u><strong>Note all’articolo</strong></u><small></p>
<ol><li>No, non fa cilecca <strong><a id="nota_1" title="torna su" href="#link_nota_1" rel="nofollow">[↵]</a></strong></li>
<li>Ho fatto fuori il ciclo (e non solo) proprio qui <strong><a id="nota_2" title="torna su" href="#link_nota_2" rel="nofollow">[↵]</a></strong></li></ol>

<p></small></p>

<p><a href="/aytin/tag:brew" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">brew</span></a> <a href="/aytin/tag:bash" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">bash</span></a> <a href="/aytin/tag:macos" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">macos</span></a> <a href="/aytin/tag:scripting" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">scripting</span></a></p>
]]></content:encoded>
      <guid>https://noblogo.org/aytin/effettuare-un-brew-upgrade-completo</guid>
      <pubDate>Tue, 28 Feb 2023 22:16:57 +0000</pubDate>
    </item>
  </channel>
</rss>