A la lliçó anterior vas conèixer Veloz Envíos i el toolkit veloz-ops que construirem durant el curs. Abans d'escriure la primera línia d'aquest toolkit necessites un entorn de treball en condicions: Bash instal·lat i en una versió moderna, una terminal còmoda, els teus fitxers de configuració sota control i l'esquelet de directoris del projecte ja creat. Aquesta és la lliçó que més gent es salta i la que més problemes evita: un entorn mal muntat produeix errors incomprensibles setmanes després («a la meva màquina funciona, al servidor no»). Deixem-ho ben lligat des del principi.
Contingut
- Comprovar si ja tens Bash i en quina versió
- Bash a Linux
- Bash a macOS: el problema de la versió 3.2
- Bash a Windows: WSL2 i Git Bash
- Obrir una terminal i triar emulador
- Els fitxers de configuració de Bash i quan es llegeix cadascun
- Personalització bàsica:
PS1, àlies iPATH - Crear l'esquelet del projecte
~/veloz-ops - Recarregar la configuració amb
source - Triar editor: nano, vim, VS Code
- Comprovar si ja tens Bash i en quina versió
El primer, sempre, és esbrinar de què partim. Hi ha dues maneres complementàries de preguntar per la versió de Bash.
GNU bash, versió 5.2.21(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2022 Free Software Foundation, Inc. Llicència GPLv3+: GNU GPL versió 3 o posterior <http://gnu.org/licenses/gpl.html>
Aquesta ordre executa el programa bash que es trobi al teu PATH i li demana que s'identifiqui. És la versió que es faria servir en llançar un script nou.
Aquí no executes cap programa: consultes una variable interna del shell que tens obert ara mateix. La diferència importa: si la teva terminal arrenca Zsh, bash --version et dirà quin Bash hi ha instal·lat, però $BASH_VERSION estarà buida perquè no ets dins de Bash.
1.1 Per què importa la versió
| Versió | Novetats rellevants | On la trobes |
|---|---|---|
| 3.2 (2007) | Base POSIX + arrays indexats, [[ ]] |
macOS per defecte |
| 4.0 (2009) | Arrays associatius (declare -A), ** recursiu, &>> |
Distros antigues (CentOS 7) |
| 4.2 (2011) | declare -g, índexs negatius als arrays |
RHEL 7 |
| 4.4 (2016) | ${var@Q} (citat segur), mapfile millorat, local -n |
Debian 9, Ubuntu 18.04 |
| 5.0 (2019) | EPOCHSECONDS, EPOCHREALTIME, BASH_ARGV0 |
Ubuntu 20.04, RHEL 9 |
| 5.1–5.2 (2020-2022) | ${var@k}, millores de rendiment, PROMPT_COMMAND com a array |
Ubuntu 22.04/24.04, Fedora |
Per a aquest curs treballarem sobre Bash 5.x, que és el que porta srv-veloz-01 (Ubuntu 24.04 LTS). Els dos punts on la versió et mossegarà de debò són:
- Arrays associatius (
declare -A, els «diccionaris» de Bash). Els farem servir al Mòdul 4 per comptar enviaments per ciutat. No existeixen abans de Bash 4. ${var@Q}, que retorna el valor d'una variable citat de manera segura per reutilitzar-lo. És molt útil en depuració i registre, i requereix Bash 4.4 o superior.
Si la teva versió és inferior a 4.4, continua llegint: la secció de macOS explica com actualitzar.
- Bash a Linux
És el cas més senzill: pràcticament totes les distribucions porten Bash instal·lat i com a shell per defecte de l'usuari. Si per algun motiu hi faltés:
# Debian, Ubuntu i derivades
sudo apt update && sudo apt install bash
# Fedora, RHEL, Rocky, AlmaLinux
sudo dnf install bash
# Arch Linux
sudo pacman -S bash
# Alpine Linux (contenidors)
apk add bashDetall important per al cas d'Alpine: les imatges Docker basades en Alpine no porten Bash, només l'ash de BusyBox. Si un Dockerfile de Veloz Envíos fa servir RUN bash script.sh sobre Alpine sense instal·lar-lo, fallarà amb bash: not found. És un clàssic.
Per saber quin shell tens assignat com a shell d'inici de sessió:
Compte amb una confusió freqüent: $SHELL no indica el shell que estàs executant ara, sinó el que tens configurat a /etc/passwd com a shell d'inici de sessió. Si obres Bash des de dins de Zsh, $SHELL continuarà dient /bin/zsh. La manera fiable de saber on ets la veurem a 01-04.
Per canviar el teu shell d'inici de sessió de manera permanent:
El canvi s'aplica a la sessió següent, no pas a l'actual.
- Bash a macOS: el problema de la versió 3.2
macOS inclou Bash, però congelat a la versió 3.2 del 2007. El motiu no és tècnic sinó de llicències: a partir de Bash 4, el projecte GNU va passar a la llicència GPLv3, que Apple no incorpora al seu sistema. A més, des de Catalina el shell per defecte dels comptes nous és Zsh.
Comprova la teva situació:
Si penses seguir aquest curs des de macOS, instal·la un Bash modern amb Homebrew:
# 1. Instal·lar Homebrew si no el tens (consulta brew.sh)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. Instal·lar Bash modern
brew install bash
# 3. Comprovar on ha quedat instal·lat
brew --prefix bashHomebrew no reemplaça el /bin/bash del sistema (macOS el protegeix): n'instal·la un de nou a /opt/homebrew/bin/bash (Apple Silicon) o /usr/local/bin/bash (Intel). Perquè sigui el que es faci servir:
# Registrar el nou shell com a vàlid
echo "$(brew --prefix)/bin/bash" | sudo tee -a /etc/shells
# Establir-lo com a shell d'inici de sessió
chsh -s "$(brew --prefix)/bin/bash"| Ruta | Versió | Què és |
|---|---|---|
/bin/bash |
3.2 | El d'Apple. No es pot tocar. |
/opt/homebrew/bin/bash |
5.x | El modern, per a la teva feina diària |
/bin/zsh |
5.x | Shell per defecte de macOS des de Catalina |
Als teus scripts, fes servir sempre #!/usr/bin/env bash en lloc de #!/bin/bash: la primera forma cerca Bash al PATH i trobarà el modern, mentre que la segona apunta rígidament al 3.2 d'Apple.
- Bash a Windows: WSL2 i Git Bash
Windows no porta Bash, però hi ha dos camins amb propòsits ben diferents.
4.1 WSL2 (recomanat)
WSL2 (Windows Subsystem for Linux 2) executa un kernel Linux real dins de Windows. No és una emulació: és una màquina virtual lleugera perfectament integrada. És el més semblant a treballar a srv-veloz-01 que pots tenir en un portàtil Windows.
Des de PowerShell com a administrador:
Després de reiniciar i crear el teu usuari Linux, ja tens un Ubuntu complet amb Bash 5.2. Ordres útils des de PowerShell:
wsl --list --verbose # veure distribucions instal·lades i el seu estat
wsl --set-default Ubuntu-24.04
wsl --shutdown # reiniciar el subsistema si s'encallaDins de WSL, els teus discos de Windows apareixen sota /mnt/c, /mnt/d, etc.
Un consell de rendiment que estalvia molts disgustos: desa els teus projectes dins del sistema de fitxers de Linux (/home/el_teu_usuari/...), no pas a /mnt/c/.... L'accés entre sistemes de fitxers és lent i els permisos de Linux no es representen correctament a NTFS.
4.2 Git Bash
Git for Windows inclou Git Bash: un Bash compilat per a Windows amb un conjunt mínim d'utilitats Unix (ls, grep, sed, ssh). És còmode per fer servir Git i executar scripts senzills, però no és Linux: no hi ha systemd, no hi ha gestor de paquets, hi falten moltes eines i alguns comportaments difereixen.
| Criteri | WSL2 | Git Bash |
|---|---|---|
| Kernel Linux real | Sí | No |
Gestor de paquets (apt) |
Sí | No |
systemd, cron |
Sí | No |
| Instal·lació | Cal activar la característica | Instal·lador simple |
Fidelitat amb srv-veloz-01 |
Alta | Baixa |
| Recomanat per a aquest curs | Sí | Només com a apedaçament |
A partir del Mòdul 7 (cron, systemd) Git Bash directament no servirà. Si treballes a Windows, instal·la WSL2.
- Obrir una terminal i triar emulador
La manera d'obrir una terminal depèn del sistema:
| Sistema | Com obrir-la |
|---|---|
| Ubuntu/GNOME | Ctrl + Alt + T, o cercar «Terminal» |
| KDE | Cercar «Konsole» |
| macOS | Cmd + Espai → «Terminal» o «iTerm» |
| Windows + WSL | Obrir «Windows Terminal» i triar la pestanya Ubuntu |
Emuladors habituals i per què triar-ne un o un altre:
- GNOME Terminal / Konsole: els que porta el teu escriptori. Més que suficients per començar.
- Windows Terminal: obligatori a Windows; gestiona pestanyes de PowerShell, CMD i WSL a la mateixa finestra, amb bon suport de colors i tipografies.
- iTerm2 (macOS): divisió de plafons, cerca a l'historial, perfils. L'estàndard entre professionals de Mac.
- Alacritty / WezTerm / Kitty: emuladors accelerats per GPU, molt ràpids amb sortides de registre enormes.
- La terminal integrada de VS Code: còmoda perquè tens editor i shell a la mateixa finestra.
Recorda el que has vist a 01-01: l'emulador no és el shell. Canviar d'Alacritty a Kitty no canvia ni una coma del teu Bash.
- Els fitxers de configuració de Bash i quan es llegeix cadascun
Aquest és el punt on hi ha més confusió, i val la pena que l'entenguis de debò. Bash llegeix fitxers diferents segons com s'hagi arrencat, i hi ha dos eixos independents.
6.1 Els dos eixos: login i interactiu
- Shell d'inici de sessió (login): és el primer que s'arrenca quan t'autentiques. Passa en entrar per SSH a
srv-veloz-01, en iniciar sessió en una consola de text, o en executarbash --login. - Shell interactiu: té un prompt i espera que teclegis. Obrir una pestanya de terminal a l'escriptori arrenca un shell interactiu que no és de login.
- Shell no interactiu: executa un script i acaba. No hi ha prompt ni ningú al davant. És el cas d'un script llançat per cron.
6.2 Taula de què es llegeix i quan
| Situació | Fitxers que llegeix Bash | Exemple típic |
|---|---|---|
| Login interactiu | /etc/profile, després el primer que existeixi de ~/.bash_profile, ~/.bash_login, ~/.profile |
Entrar per SSH a srv-veloz-01 |
| No-login interactiu | /etc/bash.bashrc i ~/.bashrc |
Obrir una pestanya de terminal |
| No interactiu (script) | Cap dels anteriors; només el fitxer indicat a $BASH_ENV, si està definit |
Un script llançat per cron |
| Tancament de sessió de login | ~/.bash_logout |
Sortir de la sessió SSH |
graph TD
A[Arrenca Bash] --> B{És shell de login?}
B -->|Sí| C["/etc/profile → ~/.bash_profile<br/>(o ~/.bash_login, o ~/.profile)"]
B -->|No| D{És interactiu?}
D -->|Sí| E["/etc/bash.bashrc → ~/.bashrc"]
D -->|No| F["Res, tret de $BASH_ENV"]
C --> G[Prompt a punt]
E --> G
6.3 La conseqüència pràctica
De la taula se'n dedueix el problema clàssic: si poses els teus àlies a ~/.bash_profile, no apareixeran en obrir una pestanya de terminal (que és no-login), i si els poses només a ~/.bashrc, no apareixeran en entrar per SSH (que és login). La solució universalment adoptada és que ~/.bash_profile carregui ~/.bashrc:
# ~/.bash_profile
# Si el shell és interactiu, carregar també la configuració de ~/.bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fiDesglossament línia a línia:
if [ -f ~/.bashrc ]; thencomprova si existeix un fitxer regular anomenat~/.bashrc. L'opció-fsignifica «és un fitxer normal». Les condicionals s'estudien a fons a 03-04.- El punt solitari
.és sinònim desource: executa el contingut d'aquest fitxer al shell actual, com si l'haguessis teclejat. fitanca l'if(ésifescrit al revés, una convenció de Bash).
A Ubuntu, ~/.profile ja porta aquesta lògica de fàbrica. Si crees un ~/.bash_profile propi, tingues en compte que ~/.profile deixarà de llegir-se, perquè Bash només llegeix el primer que troba dels tres.
La regla d'or, i el que has de recordar:
| Què vols configurar | On posar-ho |
|---|---|
Àlies, funcions, PS1, opcions interactives |
~/.bashrc |
Variables d'entorn (PATH, EDITOR) que hagin d'heretar els programes |
~/.profile o ~/.bash_profile |
| Configuració comuna a tots els usuaris del servidor | /etc/profile.d/*.sh |
- Personalització bàsica:
PS1, àlies i PATH
PS1, àlies i PATH7.1 El prompt PS1
PS1 és la variable que defineix l'aspecte del prompt. Bash admet unes seqüències d'escapada pròpies:
| Seqüència | Significat |
|---|---|
\u |
Nom d'usuari |
\h |
Nom curt de la màquina |
\w |
Directori actual complet (amb ~) |
\W |
Només el nom del directori actual |
\$ |
# si ets root, $ altrament |
\t |
Hora en format HH:MM:SS |
Un prompt una mica més informatiu amb color, pensat per treballar en servidors:
Aquí \e[32m activa el verd, \e[34m el blau i \e[0m restableix el color per defecte. Els delimitadors \\[ i \\] són imprescindibles: indiquen a Bash que allò que hi ha a dins no ocupa espai a la pantalla. Si els omets, el shell calcularà malament la longitud de la línia i veuràs el text trepitjant-se en fer servir l'historial.
Un consell professional molt útil: fes servir colors diferents al teu portàtil i al servidor de producció. Un prompt vermell a srv-veloz-01 és un recordatori visual constant d'on estàs teclejant, i evita el clàssic rm executat a la màquina equivocada.
7.2 Àlies
Un àlies és una drecera: una paraula que Bash substitueix per una altra cosa abans d'executar.
Ara, escriure ll equival a escriure ls -lh. Aspectes que has de conèixer:
- No deixis espais al voltant de l'
=:alias ll = 'ls -lh'dona error. - Els àlies només funcionen en shells interactius. Un script no els veu; per això als scripts es fan servir funcions (Mòdul 4), no àlies.
aliassense arguments llista tots els definits.- Per saltar-te temporalment un àlies, anteposa-hi una barra invertida:
\lsexecuta l'lsreal.
7.3 La variable PATH
PATH és una llista de directoris, separats per dos punts, on Bash cerca els programes quan escrius un nom d'ordre.
Quan escrius date, Bash recorre aquests directoris d'esquerra a dreta i executa la primera coincidència. El mecanisme complet de cerca l'esmicolarem a la lliçó 01-04.
Per afegir-hi un directori propi:
Tres detalls que importen:
exportfa que la variable l'heretin els programes que llancis des d'aquest shell. Senseexportnomés existiria al shell actual.- Posar
$HOME/veloz-ops/binal davant significa que els teus scripts tenen prioritat. Posar-lo al darrere ($PATH:$HOME/veloz-ops/bin) és més conservador, perquè evita que un script teu anomenatlsfaci ombra al del sistema. - No incloguis mai
.(el directori actual) alPATH. És un risc de seguretat clàssic: n'hi hauria prou que algú deixés un fitxer anomenatlsen un directori compartit perquè l'executessis sense voler. Ho tractarem a 08-03.
- Crear l'esquelet del projecte
~/veloz-ops
~/veloz-opsArriba el moment de crear l'estructura que ens acompanyarà tot el curs. Cada directori té un propòsit clar, imitant la convenció de qualsevol paquet Unix:
| Directori | Contingut | Exemple futur |
|---|---|---|
bin/ |
Scripts executables, els que s'invoquen pel seu nom | veloz-informe, veloz-backup |
lib/ |
Funcions reutilitzables que altres scripts carreguen amb source |
log.sh, csv.sh |
etc/ |
Fitxers de configuració | veloz-ops.conf |
logs/ |
Sortida generada pels nostres propis scripts | informe-2026-08-03.log |
Crea'l amb una sola ordre:
Analitzem aquesta línia, perquè conté dues idees noves:
mkdircrea directoris. L'opció-psignifica «crea també els directoris pare que calguin i no et queixis si ja existeixen». Sense-p, l'ordre fallaria si~/veloz-opsencara no existís.{bin,lib,etc,logs}és una expansió de claus: Bash la converteix en quatre rutes abans d'executar res. És a dir,mkdirrep realment quatre arguments. Aquesta expansió s'estudia a 02-05.
Comprova el resultat:
/home/joan/veloz-ops: bin etc lib logs /home/joan/veloz-ops/bin: /home/joan/veloz-ops/etc: /home/joan/veloz-ops/lib: /home/joan/veloz-ops/logs:
Ara afegeix bin/ al PATH de manera permanent. Obre ~/.bashrc amb el teu editor i afegeix-hi al final:
# --- Toolkit veloz-ops ---
export PATH="$HOME/veloz-ops/bin:$PATH"
alias ops='cd ~/veloz-ops'
alias veloz-logs='cd /var/log/veloz'Observa que es fa servir $HOME i no pas ~. Dins de cometes dobles, la titlla no s'expandeix, de manera que "~/veloz-ops/bin" crearia una ruta literal invàlida. $HOME sí que funciona sempre. És un error molt habitual i difícil de detectar.
- Recarregar la configuració amb
source
sourceHas editat ~/.bashrc, però el teu shell obert no se n'assabenta tot sol: va llegir aquest fitxer en arrencar i no el torna a mirar. Tens dues opcions: tancar i obrir la terminal, o recarregar-lo.
O bé, de manera equivalent i més portable:
source executa el contingut del fitxer al shell actual, de manera que les variables i els àlies que defineix queden disponibles aquí i ara. Això és diferent d'executar el fitxer com un script: en aquest cas Bash arrencaria un procés fill, hi definiria les variables i les perdria en acabar. Aquesta diferència —fonamental i responsable d'innombrables hores perdudes— l'entendràs del tot a la lliçó 01-04, quan parlem de subshells.
Verifica que ha funcionat:
Aquesta ordre parteix el PATH pels dos punts i mostra les tres primeres entrades; tr i les canonades s'expliquen al Mòdul 2, aquí només ho fem servir per llegir-ho còmodament.
Un avís: si executes source ~/.bashrc diverses vegades, la línia export PATH="$HOME/veloz-ops/bin:$PATH" afegirà el directori repetidament. No és greu, però embruta. Una versió defensiva:
# Afegir només si encara no hi és
case ":$PATH:" in
*":$HOME/veloz-ops/bin:"*) ;;
*) export PATH="$HOME/veloz-ops/bin:$PATH" ;;
esacLa sentència case es veu a 04-05; guarda-te-la com a recepta de moment.
- Triar editor: nano, vim, VS Code
Escriuràs molts fitxers de text. Tria una eina i aprèn-la mínimament.
| Editor | Corba d'aprenentatge | Quan fer-lo servir |
|---|---|---|
| nano | Molt baixa | Edicions ràpides en un servidor; hi és a tot arreu |
| vim | Alta | Quan treballes molt per SSH; potentíssim un cop dominat |
| VS Code | Baixa | Desenvolupament local, amb ressaltat, ShellCheck i depuració |
| micro | Baixa | Alternativa moderna a nano, amb dreceres d'escriptori |
10.1 nano
Les dreceres apareixen a la part inferior; ^ significa Ctrl. Les tres imprescindibles: Ctrl+O desa, Ctrl+X surt, Ctrl+W cerca.
10.2 vim
Vim és modal, i aquí rau la seva dificultat inicial. La supervivència mínima:
- Arrenques en mode normal (els caràcters són ordres, no text).
ientra en mode inserció per escriure.Esctorna al mode normal.:wdesa,:qsurt,:wqdesa i surt,:q!surt descartant els canvis.
Encara que no l'adoptis, aprèn aquest mínim: en un servidor acabat d'instal·lar pot ser l'únic editor disponible.
10.3 VS Code amb WSL
Si treballes a Windows amb WSL2, instal·la l'extensió WSL de Microsoft. Llavors, des de la teva terminal d'Ubuntu:
VS Code s'obrirà a Windows però treballant dins del sistema de fitxers de Linux, amb la seva terminal integrada apuntant a Bash. És la millor combinació de comoditat i fidelitat a l'entorn del servidor.
Extensions recomanades per a aquest curs:
- ShellCheck: marca errors de shell mentre escrius (ho veurem a fons a 08-05).
- shell-format: formata scripts automàticament.
- Bash Debug: permet executar pas a pas.
Finalment, defineix el teu editor preferit perquè altres eines (com ara crontab -e, que farem servir al Mòdul 7) el respectin. A ~/.profile:
Errors Habituals i Consells
- Posar els àlies a
~/.bash_profile. No apareixeran en obrir una pestanya de terminal, perquè aquella és una sessió no-login. Els àlies i elPS1van a~/.bashrc. - Crear un
~/.bash_profilei «perdre» la configuració de~/.profile. Bash llegeix només el primer de~/.bash_profile,~/.bash_login,~/.profile. Si crees el primer, el tercer deixa de llegir-se. - Escriure
export PATH="~/veloz-ops/bin:$PATH". La titlla no s'expandeix dins de cometes dobles. Fes servir$HOME. - Oblidar
$PATHen reassignar-lo. Escriureexport PATH="$HOME/veloz-ops/bin"deixa el sistema sense accés als,grepni res. Si et passa, la sessió actual queda inservible però s'arregla obrint una terminal nova i corregint el fitxer; per recuperar la sessió trencada pots fer servirexport PATH=/usr/bin:/binprovisionalment. - Espais a
alias ll = 'ls -lh'. A Bash, les assignacions no admeten espais al voltant de l'=. - Editar
~/.bashrci esperar que el canvi s'apliqui tot sol. Recarrega ambsource ~/.bashrco obre una terminal nova. - Consell: abans de tocar
~/.bashrc, fes-ne una còpia (cp ~/.bashrc ~/.bashrc.bak). Un error de sintaxi allà pot deixar-te amb una terminal que mostra errors a cada arrencada. - Consell: si administres diversos servidors, mantén els teus dotfiles en un repositori Git. A 08-04 veurem com.
Exercicis
Exercici 1: Diagnòstic del teu entorn
Esbrina i anota, a la teva pròpia màquina:
- La versió de Bash instal·lada i si admet arrays associatius (necessites 4.0 o superior).
- El teu shell d'inici de sessió configurat.
- Quants directoris té el teu
PATH. - Si existeixen
~/.bashrc,~/.bash_profilei~/.profile.
Exercici 2: Muntar l'entorn de veloz-ops
Deixa el teu entorn a punt per al curs:
- Crea
~/veloz-opsamb els subdirectorisbin,lib,etcilogsen una sola ordre. - Afegeix
~/veloz-ops/binal principi delPATHde manera permanent. - Defineix un àlies
opsque et porti a~/veloz-ops. - Canvia el teu prompt perquè mostri usuari, màquina i directori actual.
- Aplica els canvis sense tancar la terminal i verifica que tot funciona.
Exercici 3: Raonar sobre els fitxers d'arrencada
Un company de Veloz Envíos defineix export API_TOKEN="abc123" únicament al seu ~/.bashrc. Després programa un script a cron que necessita aquesta variable, i l'script falla dient que API_TOKEN és buida.
- Explica per què falla.
- Proposa dues solucions diferents.
Solucions
Solució a l'Exercici 1
bash --version | head -1
echo "$BASH_VERSION"
echo "$SHELL"
echo "$PATH" | tr ':' '\n' | wc -l
ls -la ~/.bashrc ~/.bash_profile ~/.profileGNU bash, versió 5.2.21(1)-release (x86_64-pc-linux-gnu) 5.2.21(1)-release /bin/bash 6 -rw-r--r-- 1 joan joan 3771 ago 3 09:12 /home/joan/.bashrc ls: no s'ha pogut accedir a '/home/joan/.bash_profile': El fitxer o directori no existeix -rw-r--r-- 1 joan joan 807 ago 3 09:12 /home/joan/.profile
Interpretació: hi ha Bash 5.2, molt per damunt del 4.0 necessari per als arrays associatius; el shell d'inici de sessió és Bash; el PATH té 6 entrades (tr converteix els : en salts de línia i wc -l compta línies); i existeixen ~/.bashrc i ~/.profile, però no ~/.bash_profile, que és la configuració estàndard d'Ubuntu.
Solució a l'Exercici 2
# 1. Estructura de directoris
mkdir -p ~/veloz-ops/{bin,lib,etc,logs}
# 2, 3 i 4. Configuració persistent
cat >> ~/.bashrc << 'EOF'
# --- Toolkit veloz-ops ---
export PATH="$HOME/veloz-ops/bin:$PATH"
alias ops='cd ~/veloz-ops'
PS1='\u@\h:\w\$ '
EOF
# 5. Aplicar i verificar
source ~/.bashrc
echo "$PATH" | tr ':' '\n' | head -1
alias ops
ls ~/veloz-opsLa construcció cat >> fitxer << 'EOF' ... EOF és un here-document: afegeix al final del fitxer tot el text fins a la marca EOF. Les cometes simples al voltant de 'EOF' són importants: eviten que $HOME i $PATH s'expandeixin ara en lloc de quedar escrits literalment al .bashrc. Els here-documents s'estudien a 05-05; també pots fer-ho simplement obrint el fitxer amb nano ~/.bashrc i escrivint les línies a mà.
Solució a l'Exercici 3
-
Falla perquè els scripts de cron s'executen en un shell no interactiu i sense login. Com hem vist a la taula, en aquest mode Bash no llegeix ni
~/.bashrcni~/.bash_profile. De fet,~/.bashrca Ubuntu comença amb una comprovació que avorta la seva execució si el shell no és interactiu. Per tantAPI_TOKENno arriba mai a definir-se a l'entorn de cron. -
Dues solucions vàlides:
- Definir la variable dins del mateix script o en un fitxer de configuració que l'script carregui explícitament, per exemple
~/veloz-ops/etc/veloz-ops.confamb unsourcea l'inici. És la més neta i la que farem servir al curs: l'script no depèn de l'entorn de qui el llanci. - Definir-la al mateix
crontab, ja que cron admet assignacions abans de les línies de tasques (API_TOKEN=abc123). Funciona, però barreja secrets amb la programació de tasques.
Com a variant, es podria fer servir
BASH_ENVapuntant a un fitxer d'entorn, però és poc habitual i fràgil. En general, la lliçó que cal extreure'n és: un script no ha de dependre de la configuració interactiva de l'usuari. Ho veurem aplicat a 07-01. - Definir la variable dins del mateix script o en un fitxer de configuració que l'script carregui explícitament, per exemple
Conclusió
El teu entorn ja està a punt: saps quina versió de Bash tens i per què importa, com aconseguir un Bash modern a Linux, macOS i Windows, i —el més valuós a mitjà termini— quin fitxer de configuració es llegeix en cada situació, que és l'arrel de la majoria dels «a mi no em funciona». A més, ~/veloz-ops ja existeix amb els seus quatre directoris, el seu bin és al PATH i tens àlies i prompt al teu gust.
Amb el terreny preparat, toca aprendre a moure-t'hi. A la lliçó següent, Navegació Bàsica a la Línia d'Ordres, recorreràs l'arbre de directoris de Linux, entendràs l'anatomia d'una ordre i exploraràs per primer cop la infraestructura real de Veloz Envíos: /var/log/veloz, /srv/veloz/dades i el teu propi ~/veloz-ops.
Curs de Programació en Bash
Mòdul 1: Introducció a Bash
- Què és Bash?
- Configurar el teu Entorn
- Navegació Bàsica per la Línia d'Ordres
- Entendre el Shell
- Trobar Ajuda: man, help i --help
Mòdul 2: Ordres Bàsiques de Bash
- Operacions amb Fitxers i Directoris
- Ordres de Processament de Text
- Permisos i Propietat dels Fitxers
- Redirecció i Canonades
- Comodins i Expansió de Rutes
- Historial i Dreceres de Teclat
Mòdul 3: Fonaments de Scripting
- Crear i Executar un Script
- Variables i Constants
- Operadors Bàsics
- Sentències Condicionals
- Arguments i Entrada de l'Usuari
- Cometes, Expansió i Substitució
Mòdul 4: Scripting Intermedi
- Bucles en Bash
- Funcions en Bash
- Arrays i Arrays Associatius
- Manipulació de Cadenes
- La Sentència case i els Menús Interactius
- Aritmètica i Càlculs Numèrics
Mòdul 5: Tècniques Avançades de Scripting
- Operacions Avançades amb Fitxers
- Gestió de Processos
- Gestió d'Errors i Depuració
- Expressions Regulars
- Entrada/Sortida Avançada: Descriptors i Here-Documents
- Scripts Modulars i Llibreries Reutilitzables
Mòdul 6: Treballar amb Eines Externes
Mòdul 7: Automatització i Programació
- Tasques Cron
- Automatitzar Tasques
- Scripts de Còpia i Restauració
- Monitoratge i Registre
- Serveis i Temporitzadors amb systemd
- Automatització Remota amb SSH
Mòdul 8: Bones Pràctiques i Optimització
- Escriure Codi Llegible
- Optimitzar Scripts en Bash
- Consideracions de Seguretat
- Control de Versions amb Git
- Anàlisi Estàtica amb ShellCheck i shfmt
- Proves Automatitzades amb Bats
- Portabilitat: POSIX sh enfront de Bashismes
