{"id":229853,"date":"2022-11-05T11:59:00","date_gmt":"2022-11-05T08:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229853"},"modified":"2022-11-09T16:40:12","modified_gmt":"2022-11-09T13:40:12","slug":"un-primer-in-bash-per-gli-sviluppatori-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/un-primer-in-bash-per-gli-sviluppatori-di-wordpress\/","title":{"rendered":"Un Primer in Bash per gli sviluppatori di WordPress"},"content":{"rendered":"\n<p>Di tanto in tanto, finisco per installare un software tramite <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> o che inserisce alcuni dei suoi binari in directory diverse dai soliti posti in cui macOS si aspetta di trovarli.<\/p>\n<p>Cio\u00e8, se stai eseguendo un&#8217;app da Terminale o se un&#8217;applicazione con una GUI si aspetta di trovarsi in una determinata posizione sul disco, \u00e8 probabile che la si aspetter\u00e0 in una delle cinque posizioni:<\/p>\n<ol>\n<li>\/usr\/bin<\/li>\n<li>\/bidone<\/li>\n<li>\/usr\/sbin<\/li>\n<li>\/sbin<\/li>\n<li>\/usr\/locale\/bin<\/li>\n<\/ol>\n<p>Ma, come ho detto, col tempo finiamo per installare cose usando strumenti di terze parti, o finiamo per installare cose che mettono i binari al di fuori di una di queste directory.<\/p>\n<p>Caso in questione: cosa succede se si desidera installare <a href=\"http:\/\/wp-cli.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP-CLI a<\/a> livello globale? O cosa succede se si desidera utilizzare una versione di MySQL fornita con <a href=\"https:\/\/www.mamp.info\/en\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">MAMP<\/a>? <\/p>\n<p>In questi casi, quei binari non verranno inclusi in nessuna delle directory summenzionate. Quando ci\u00f2 accade, devi modificare il tuo profilo. Se non l&#8217;hai mai fatto, pu\u00f2 essere scoraggiante. E pu\u00f2 diventare disordinato se non lo fai metodicamente nel tempo.<\/p>\n<p>Quindi ecco un&#8217;introduzione su Bash per gli sviluppatori di WordPress per sapere qual \u00e8 il tuo <strong>bash_profile<\/strong> e come gestire software di terze parti con esso.<\/p>\n<h2>Bash per gli sviluppatori di WordPress<\/h2>\n<p>Prima di entrare nell&#8217;impostazione dei percorsi, per altri software e simili, \u00e8 importante notare che potresti non avere un <strong>bash_profile<\/strong>. Cio\u00e8, se usi un terminale, puoi usare un diverso tipo di shell e, in tal caso, sei gi\u00e0 molto pi\u00f9 avanti di questo post.<\/p>\n<p>Se d&#8217;altra parte, utilizzi la shell del terminale senza modifiche fornita con macOS. Ma prima, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Shell_(computing)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cos&#8217;\u00e8 una shell<\/a>? <\/p>\n<blockquote>\n<p>In informatica, una shell \u00e8 un&#8217;interfaccia utente per l&#8217;accesso ai servizi di un sistema operativo. In generale, le shell del sistema operativo utilizzano un&#8217;interfaccia della riga di comando (CLI) o un&#8217;interfaccia utente grafica (GUI), a seconda del ruolo del computer e dell&#8217;operazione particolare.<\/p>\n<\/blockquote>\n<p>E se stai usando Terminal senza modifiche, probabilmente stai usando <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bash_(Unix_shell)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Bash<\/a>.<\/p>\n<p>Infine, tutte le impostazioni per ogni volta che avvii Terminale sono memorizzate nel file di profilo pertinente della shell. In questo caso, tutto \u00e8 archiviato in <strong>.bash_profile<\/strong>.<\/p>\n<p>Per impostare tutto esattamente come ci serve, allora dobbiamo apportare alcune modifiche (o addirittura inizializzarlo) per far funzionare le cose.<\/p>\n<p><strong>Nota\u00a0<\/strong> che dopo ogni modifica apportata a <strong>.bash_profile<\/strong> potresti voler eseguire:<\/p>\n<pre><code>$ source ~\/.bash_profile<\/code><\/pre>\n<p>Quindi tutte le nuove modifiche introdotte vengono caricate per la sessione del terminale corrente.<\/p>\n<h3>Il profilo iniziale<\/h3>\n<p>Ogni volta che configuro il mio profilo iniziale, sembra sempre lo stesso. Cio\u00e8, include le cinque directory che <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c337af437e59084382597f57431db798#file-00-initial-bash-profile-sh\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ho elencato sopra<\/a> :<\/p>\n<pre><code>PATH=\"\/usr\/bin:\/bin:\/usr\/sbin:\/sbin:\/usr\/local\/bin:$PATH\"\nexport PATH<\/code><\/pre>\n<p>Noterai alla fine della\u00a0 variabile <strong>PATH<\/strong>, tuttavia, che c&#8217;\u00e8 qualcosa che assomiglia a un&#8217;altra variabile. In particolare, sto parlando di <strong>$PATH<\/strong>. Ed \u00e8 importante capirlo perch\u00e9 influisce sul modo in cui i programmi vengono trovati all&#8217;interno del terminale.<\/p>\n<h4>Cos&#8217;\u00e8 $PATH?<\/h4>\n<p>Innanzitutto, pensa che fosse un modo per la shell o per il sistema operativo di cercare i binari. Quindi, se hai tutti e cinque i percorsi sopra definiti, il sistema operativo cercher\u00e0 in quelle directory determinati binari.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e795683c64a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e795683c64a.png\" alt=\"Un Primer in Bash per gli sviluppatori di WordPress\" ><\/a><\/p>\n<p>Per provarlo, avvia il terminale e digita:<\/p>\n<pre><code>$ which clear<\/code><\/pre>\n<p>E questo ti mostrer\u00e0 dove trova l&#8217;\u00a0 eseguibile <strong>clear<\/strong> sul tuo sistema (dove clear cancella semplicemente lo schermo del terminale \ud83d\ude42).<\/p>\n<p>Successivamente, nota che <strong>$PATH\u00a0<\/strong> \u00e8 definito alla fine della stringa nell&#8217;esempio precedente. Quando modifichi il tuo profilo, ti piacer\u00e0 lavorarci. In breve, definisce l&#8217;ordine di ricerca nelle directory.<\/p>\n<p>Quindi, nel succo sopra, il Terminale cercher\u00e0 un binario che corrisponda a ci\u00f2 che stai cercando di eseguire iniziando in <strong>\/usr\/bin<\/strong> e finendo in <strong>\/usr\/local\/bin<\/strong>.<\/p>\n<h3>Cosa significa &quot;Esportazione&quot;?<\/h3>\n<p>Se non stai usando Bash, non posso commentare l&#8217;equivalente, ma nel contesto di Bash, <strong>l&#8217;esportazione<\/strong> \u00e8 un modo per assegnare esplicitamente il valore alla\u00a0 variabile <strong>PATH<\/strong> definita nel gist sopra.<\/p>\n<p>Cio\u00e8, nella programmazione stiamo usando per creare una variabile e assegnarle un valore. Questo \u00e8 simile a quello. Tuttavia, siamo un po&#8217; pi\u00f9 espliciti. In poche parole, stiamo impostando una variabile sul lato sinistro sul valore sul lato destro. E questo viene impostato utilizzando <strong>l&#8217;esportazione.<\/strong><\/p>\n<p>Quindi, se vuoi vedere cosa\u00a0 contiene <strong>$PATH<\/strong>, digita questo nel tuo terminale:<\/p>\n<pre><code>$ echo $PATH<\/code><\/pre>\n<p>Quindi vedresti il \u200b\u200bvalore dei cinque percorsi definiti finora.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e7956b32b60.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e7956b32b60.png\" alt=\"Un Primer in Bash per gli sviluppatori di WordPress\" ><\/a><\/p>\n<p>Nel tempo, per\u00f2, vogliamo naturalmente aggiungere altro a questo.<\/p>\n<h3>Pacchetti compositore<\/h3>\n<p>Ho parlato dell&#8217;installazione di Composer e di come installare i pacchetti usandolo nei post precedenti a livello globale. Ma diciamo che per ragioni di discussione vogliamo installare WP-CLI e quindi aggiungerlo in modo tale che sia possibile accedervi tramite il terminale in qualsiasi punto del nostro sistema. E tutto questo pu\u00f2 essere fatto utilizzando le informazioni del profilo sopra.<\/p>\n<p>Supponendo che tu abbia installato il compositore e che <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c337af437e59084382597f57431db798#file-01-composer-example-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il tuo composer.json assomigli a questo<\/a> (insieme ad alcune altre cose, ma per ora ignorale):<\/p>\n<pre><code>{\n    \"require\": {\n        \"squizlabs\/php_codesniffer\": \"2.9.1\",\n        \"wp-cli\/wp-cli\": \"~1.2.1\",\n        \"psy\/psysh\": \"~0.8.6\"\n    }\n}\n<\/code><\/pre>\n<p>E hai corso:<\/p>\n<pre><code>$ composer update<\/code><\/pre>\n<p>Quindi WP-CLI \u00e8 stato installato. Ma quando provi ad eseguirlo dal terminale al di fuori della sua directory di installazione, non funziona. Allora cosa d\u00e0?<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e7956e399dc.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e7956e399dc.png\" alt=\"Un Primer in Bash per gli sviluppatori di WordPress\" ><\/a><\/p>\n<p>Il percorso dei binari installati tramite composer non \u00e8 impostato nel nostro <strong>.bash_profile<\/strong>. Per risolvere questo problema, aggiungi una nuova riga a <strong>.bash_profile<\/strong> ma assicurati di non ridefinire qualcosa che gi\u00e0 esiste.<\/p>\n<p>Cio\u00e8, poich\u00e9 <strong>PATH<\/strong> esiste, possiamo semplicemente impostare <strong>$PATH<\/strong> alla fine della nostra nuova riga e anteporre la nostra directory Composer ad essa. In questo modo, non duplichiamo directory o valori nella variabile ogni volta che li esportiamo e impostiamo la priorit\u00e0 di quali directory vengono cercate.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c337af437e59084382597f57431db798#file-02-adding-composer-packages-sh\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ad esempio<\/a> :<\/p>\n<pre><code>PATH=\"\/usr\/bin:\/bin:\/usr\/sbin:\/sbin:\/usr\/local\/bin\"\nPATH=\"$HOME\/.composer\/vendor\/bin:$PATH\"\n\nexport PATH<\/code><\/pre>\n<p>Quindi, quando tenti di eseguire <strong>wp<\/strong> da qualsiasi punto della riga di comando, dovrebbe funzionare e dovresti essere in grado di digitare:<\/p>\n<pre><code>$ which wp<\/code><\/pre>\n<p>E guarda che proviene dalla directory <strong>composer\/vendor\/bin<\/strong>. Oh \u2013 e nota che <strong>$HOME<\/strong> \u00e8 una variabile che fa riferimento alla home directory dell&#8217;utente corrente. Questo pu\u00f2 essere modificato, ma non rientra nell&#8217;ambito di questo post.<\/p>\n<h3>Software MAMP<\/h3>\n<p>A questo punto, la versione di PHP, MySQL o qualsiasi lingua e strumento tu scelga di utilizzare cambier\u00e0. Ho fornito alcuni post diversi su MAMP (<a href=\"https:\/\/tommcfarlin.com\/mailcatcher-mamp-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">1<\/a>, <a href=\"https:\/\/tommcfarlin.com\/php-error-log\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">2<\/a>, <a href=\"https:\/\/tommcfarlin.com\/using-phpstorm-for-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">3<\/a> ), quindi \u00e8 quello che sto scegliendo di usare un esempio.<\/p>\n<p>In particolare, voglio utilizzare la versione MAMP di PHP e MySQL, non quella fornita con il sistema. Ma, a questo punto, puoi eseguire:<\/p>\n<pre><code>$ which php<\/code><\/pre>\n<p>E:<\/p>\n<pre><code>$ which mysql<\/code><\/pre>\n<p>E guarda che provengono entrambi da directory di sistema. Questo deve essere modificato in modo che il nostro accesso alla riga di comando utilizzi la stessa versione del software utilizzata dalla nostra applicazione.<\/p>\n<p>Per fare ci\u00f2, possiamo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c337af437e59084382597f57431db798#file-03-adding-php7-sh\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aggiungere le seguenti righe<\/a> al nostro <strong>.bash_profile<\/strong> :<\/p>\n<pre><code>PATH=\"\/usr\/bin:\/bin:\/usr\/sbin:\/sbin:\/usr\/local\/bin\"\nPATH=\"$PATH:$HOME\/.composer\/vendor\/bin\"\nPATH=\"\/Applications\/MAMP\/bin\/php\/php7.1.0\/bin:$PATH\"\n\nexport PATH<\/code><\/pre>\n<p>C&#8217;\u00e8 qualcosa da importare da notare qui, per\u00f2: ho posizionato la directory binaria PHP di MAMP prima dei valori di <strong>$PATH<\/strong>. Questo perch\u00e9 voglio che il sistema guardi prima qui (non nelle directory di sistema).<\/p>\n<p>C&#8217;\u00e8 una seconda sfida, per\u00f2. MAMP viene fornito con diverse versioni di PHP e le probabilit\u00e0 che vogliamo utilizzare la stessa versione ogni volta sono scarse. Quindi abbiamo bisogno di un modo per usare qualunque versione sia selezionata in MAMP, giusto?<\/p>\n<p>Un modo per farlo \u00e8 usare un alias.<\/p>\n<h3>E gli alias?<\/h3>\n<p>Puoi pensare agli alias come a una scorciatoia: \u00e8 un modo rapido per eseguire un comando o un programma particolare senza dover digitare un nome completo per un programma.<\/p>\n<p>Nel caso di MAMP e PHP, ci sono alcune versioni di PHP che potremmo utilizzare. Al momento in cui scrivo, ho:<\/p>\n<ul>\n<li>5.4.45<\/li>\n<li>5.5.38<\/li>\n<li>5.6.28<\/li>\n<li>7.0.13<\/li>\n<li>7.1.0<\/li>\n<\/ul>\n<p>Tutto disponibile sul mio sistema. \u00c8 probabile che non voglia usarli tutti (n\u00e9 averli tutti nel mio <strong>$PATH<\/strong> ), ma potrebbe esserci una possibilit\u00e0 in cui voglio eseguire una versione precedente di PHP per testare qualcosa in particolare.<\/p>\n<p>Allora come possiamo farlo? Possiamo usare alias. E se accedi a <strong>\/Applications\/MAMP\/bin\/php\u00a0<\/strong> dovresti vedere tutte le versioni di PHP incluse con la tua versione di MAMP.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e795712a3f6.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166528-61e795712a3f6.png\" alt=\"Un Primer in Bash per gli sviluppatori di WordPress\" ><\/a><\/p>\n<p>Ora <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c337af437e59084382597f57431db798#file-04-aliases-sh\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">imposteremo gli alias<\/a> per ciascuno di questi:<\/p>\n<pre><code>## Aliases to old versions of PHP.\nalias php54=\"\/Applications\/MAMP\/bin\/php\/php5.4.45\/bin\/php\"\nalias php55=\"\/Applications\/MAMP\/bin\/php\/php5.5.38\/bin\/php\"\nalias php56=\"\/Applications\/MAMP\/bin\/php\/php5.6.28\/bin\/php\"\nalias php70=\"\/Applications\/MAMP\/bin\/php\/php7.0.13\/bin\/php\"<\/code><\/pre>\n<p>E possiamo eseguirli ciascuno indipendentemente dall&#8217;altro nel terminale eseguendo un comando come:<\/p>\n<pre><code>$ php54 -v<\/code><\/pre>\n<p>Questo dovrebbe mostrarti quale versione di PHP viene eseguita in base all&#8217;alias che hai definito in <strong>.bash_profile<\/strong>.<\/p>\n<p>E infine, nota nel succo finale che vedrai una riga che \u00e8 stata aggiunta a <strong>.bash_profile<\/strong> :<\/p>\n<pre><code>source ~\/.profile<\/code><\/pre>\n<p>Questo viene fatto automaticamente dal sistema in particolare quando inizi a lavorare con una shell interattiva. Puoi eliminarlo, ma verr\u00e0 aggiunto di nuovo nella parte superiore del file, quindi non preoccuparti.<\/p>\n<p>E, per riferimento, la versione finale del mio <strong>.bash_profile<\/strong> \u00e8 simile <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c337af437e59084382597f57431db798#file-05-bash-profile-sh\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questa<\/a> :<\/p>\n<pre><code>source ~\/.profile\n\nPATH=\"\/usr\/bin:\/bin:\/usr\/sbin:\/sbin:\/usr\/local\/bin\"     # The standard system binaries\nPATH=\"$HOME\/.composer\/vendor\/bin:$PATH\"                 # Composer binaries\nPATH=\"\/Applications\/MAMP\/bin\/php\/php7.1.0\/bin:$PATH\"    # MAMP's PHP7 loaded first\nPATH=\"\/Applications\/MAMP\/Library\/bin:$PATH\"             # MAMP's MySQL loaded first\n\n## Aliases to old versions of PHP.\nalias php54=\"\/Applications\/MAMP\/bin\/php\/php5.4.45\/bin\/php\"\nalias php55=\"\/Applications\/MAMP\/bin\/php\/php5.5.38\/bin\/php\"\nalias php56=\"\/Applications\/MAMP\/bin\/php\/php5.6.28\/bin\/php\"\nalias php70=\"\/Applications\/MAMP\/bin\/php\/php7.0.13\/bin\/php\"\n\nexport PATH<\/code><\/pre>\n<p>Vedrai che ho anche aggiunto righe per MySQL e MySQLAdmin appena sopra la riga che definisce gli alias (anche se \u00e8 probabile che la tua abbia un aspetto diverso).<\/p>\n<p>Indipendentemente da ci\u00f2, questa \u00e8 un&#8217;idea generale anche se \u00e8 probabile che la tua abbia un aspetto diverso.<\/p>\n<h2>Bash pi\u00f9 avanzato<\/h2>\n<p>Ci sono persone che sono molto pi\u00f9 avanzate di me in Bash (e anche navigare in altri siti su ci\u00f2 che alcune persone hanno fatto pu\u00f2 essere impressionante).<\/p>\n<p>Ma se sei uno sviluppatore WordPress con poca o nessuna conoscenza di Bash, strumenti da riga di comando, impostazione di percorsi e cos\u00ec via, allora questo \u00e8 qualcosa che dovrebbe essere un riferimento funzionante e un punto di partenza decente.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ecco un&#8217;introduzione su Bash per gli sviluppatori di WordPress per sapere cos&#8217;\u00e8 il tuo bash_profile e come gestire software di terze parti con esso.<\/p>\n","protected":false},"author":1,"featured_media":224039,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,720],"tags":[1168],"class_list":["post-229853","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-sviluppatore","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229853"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229853\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224039"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}