1 20/04/2026 9 min

Fish Shell su Debian 10: installazione pulita e scelta consapevole

Su Debian 10 Fish si installa in pochi minuti, ma il punto vero non è il comando in sé: è capire se vuoi usarlo come shell interattiva per il tuo utente oppure impostarlo come login shell predefinita. Sono due scenari diversi, con impatto diverso su sessioni SSH, script e abitudini di amministrazione. Se lavori su server, la scelta corretta di solito è partire in modo reversibile, provarlo nel terminale corrente e solo dopo decidere se renderlo la shell di default.

Fish non è una sostituzione “drop-in” di bash o dash. È più ergonomico in uso interattivo, con completamento forte, sintassi coerente e una configurazione leggibile. Di contro, non è pensato per eseguire script POSIX tradizionali. Su Debian questo dettaglio conta: puoi installarlo senza problemi, ma non devi confondere la shell con cui amministri il sistema con quella con cui esegui script di sistema o automazioni esistenti.

Verifica del contesto prima di toccare il sistema

Prima di installare, conviene verificare che il pacchetto sia disponibile nei repository attivi e che il sistema sia allineato. Su Debian 10 il pacchetto ufficiale di Fish è normalmente presente nei repository standard, quindi non serve partire da repository esterni salvo esigenze particolari di versione.

Controlla la release e lo stato dei repository attivi:

cat /etc/debian_version
apt-cache policy fish

Il primo comando ti conferma il ramo installato; il secondo ti mostra se il pacchetto è visibile e da quale origine arriverebbe. Se `apt-cache policy fish` non restituisce alcun candidato, il problema non è Fish: è la configurazione di APT o la lista sorgenti.

Se devi sistemare i repository, il file da guardare è in genere ` /etc/apt/sources.list` e, se presenti, i file in ` /etc/apt/sources.list.d/`. In un ambiente già standardizzato, la verifica minima è spesso sufficiente:

grep -R "^deb " /etc/apt/sources.list /etc/apt/sources.list.d/

Installazione del pacchetto

Su Debian 10 l’installazione base è diretta. Aggiorna prima l’indice dei pacchetti, poi installa Fish. È una modifica reversibile: rimuovere il pacchetto non tocca i file di configurazione utente già creati nella home, ma lascia comunque lo stato applicativo da verificare.

sudo apt update
sudo apt install fish

Al termine, verifica che il binario sia presente e che la versione corrisponda a quella installata:

fish --version
command -v fish

Se `command -v fish` restituisce un path come ` /usr/bin/fish`, l’installazione è andata a buon fine. Se il comando non viene trovato, la prima cosa da controllare non è la shell corrente, ma l’esito di `apt install` e gli eventuali errori di dipendenze in output.

In caso di errore sui pacchetti, i log utili sono quelli di APT e di dpkg. Per una diagnosi rapida, guarda gli ultimi messaggi:

tail -n 50 /var/log/apt/term.log
tail -n 50 /var/log/dpkg.log

Avvio immediato senza cambiare la shell di login

Il modo più sicuro per provarlo è lanciare Fish dentro la sessione corrente. Così non tocchi ` /etc/passwd` e non rischi di tagliarti fuori da SSH se qualcosa non ti convince.

fish

Una volta dentro, verifica il comportamento base con un paio di test rapidi. Per esempio, Fish gestisce l’autocompletamento e alcune espansioni in modo diverso da bash. Un controllo utile è vedere la shell corrente e la lista di variabili:

echo $SHELL
set -q fish_user_paths; and echo $fish_user_paths

Qui non stai ancora modificando nulla: stai solo osservando come si comporta la shell. Se noti che i tuoi alias o script abituali non funzionano, è normale. Fish non legge ` ~/.bashrc` e non interpreta la sintassi bash nello stesso modo.

Impostare Fish come shell predefinita per l’utente

Se vuoi usarlo stabilmente, devi prima assicurarti che Fish sia elencata tra le shell consentite. Debian usa il file ` /etc/shells` per validare la shell di login. La verifica è semplice:

grep -x '/usr/bin/fish' /etc/shells || echo '/usr/bin/fish non presente in /etc/shells'

Se il percorso non compare, aggiungilo con attenzione. È una modifica piccola ma di sistema, quindi conviene fare backup del file prima di intervenire.

sudo cp /etc/shells /etc/shells.bak.$(date +%F-%H%M%S)
echo '/usr/bin/fish' | sudo tee -a /etc/shells

A questo punto puoi cambiare la shell dell’utente corrente con `chsh`. È il passaggio che ha più senso in un cambio controllato, perché resta confinato al profilo utente e non altera il comportamento globale del sistema.

chsh -s /usr/bin/fish

Dopo il logout e il nuovo accesso, verifica la shell effettiva con:

echo $SHELL
ps -p $$ -o comm=

Il primo comando mostra la shell dichiarata per la sessione; il secondo conferma il processo shell effettivamente in esecuzione. Se i due valori non coincidono, non è per forza un errore: dipende dal metodo con cui hai aperto la sessione. In caso di dubbio, controlla l’account in ` /etc/passwd` con:

getent passwd "$USER"

La riga finale del record contiene la shell assegnata. Se vuoi tornare indietro, basta ripetere `chsh -s /bin/bash` o la shell preesistente. Questo è il rollback più semplice e pulito.

Configurazione iniziale: il minimo per non litigare con il sistema

Fish crea la propria configurazione nella home dell’utente, in genere sotto ` ~/.config/fish/`. Il file principale per la personalizzazione interattiva è ` ~/.config/fish/config.fish`. Non serve riempirlo subito: meglio partire con poche impostazioni, così distingui facilmente i problemi di shell da quelli introdotti dalla tua configurazione.

Un esempio minimale e sensato è questo:

# ~/.config/fish/config.fish
set -gx EDITOR vim
set -gx VISUAL vim
set -gx PAGER less

Queste variabili sono utili in amministrazione e non alterano il comportamento di base della shell. Evita invece di copiare blocchi bash dentro `config.fish`: la sintassi è diversa e i problemi che ne derivano sembrano spesso “Fish rotto”, quando in realtà è solo configurazione scritta per un altro interprete.

Per aggiungere un path utente senza sporcare `PATH` in modo permanente, usa Fish nel suo stile nativo:

fish_add_path ~/.local/bin

Questo è preferibile a concatenazioni manuali, perché evita duplicati e mantiene la configurazione più leggibile. Se vuoi renderlo permanente, puoi inserirlo in `config.fish` oppure usare la configurazione universale con `set -U`, ma su sistemi server conviene essere prudenti e capire dove sta la modifica.

Compatibilità con script e abitudini da amministratore

Il punto più importante, in contesto Linux, è che Fish va bene per l’uso interattivo, ma non è la scelta giusta per script POSIX già scritti. Se hai cron, script di deploy, tool di provisioning o snippet copiati da documentazione bash, lasciali con l’interprete previsto. Non convertire tutto “per coerenza” senza motivo.

Se devi eseguire un comando bash da Fish, usa esplicitamente bash:

bash -lc 'echo $BASH_VERSION; uname -a'

Questo approccio è utile anche quando un comando di manutenzione si basa su costrutti shell specifici. La regola pratica è semplice: Fish per il terminale dell’operatore, bash o sh per gli script che devono restare portabili e prevedibili.

Un altro aspetto da non sottovalutare è l’uso di alias e funzioni. In Fish, molte personalizzazioni che in bash finiscono in `.bashrc` vanno ripensate. Se un alias è solo una scorciatoia interattiva, Fish lo gestisce bene; se invece stai creando logica complessa, meglio una funzione vera e propria o, ancora meglio, uno script dedicato nel path.

Gestione del rollback e rimozione

Se Fish non ti convince o vuoi rimuoverlo dopo il test, il rollback è lineare. Prima ripristina la shell dell’utente, poi rimuovi il pacchetto. L’ordine conta: non vuoi ritrovarti con un utente configurato su una shell non più installata.

chsh -s /bin/bash
sudo apt remove fish

Se vuoi rimuovere anche i file di configurazione del pacchetto, puoi usare `purge`, ma fallo solo se sei sicuro di non voler conservare nulla per un’eventuale reinstallazione:

sudo apt purge fish

I file nella home, come ` ~/.config/fish/`, non vengono cancellati automaticamente da `apt remove`. Questo è utile se vuoi lasciare una configurazione pronta per un futuro ritorno, ma può anche confondere durante i test. Se fai prove ripetute, tieni traccia di cosa sta nel sistema e cosa nella home dell’utente.

Uso pratico: dove Fish rende davvero di più

Fish ha senso quando passi molto tempo in shell e vuoi ridurre attrito operativo. Il completamento dei comandi è spesso il primo vantaggio percepito, seguito dalla leggibilità delle funzioni e dalla facilità con cui si esplorano le opzioni disponibili. In un contesto sysadmin, questo si traduce in meno errori di digitazione e in un feedback più rapido mentre lavori su host remoti.

Per esempio, se devi cercare un pacchetto o un servizio, l’autocompletamento aiuta a evitare nomi errati. Se devi ripetere comandi con parametri simili, Fish riduce il numero di volte in cui devi ricostruire mentalmente la sintassi. Sono vantaggi piccoli, ma quotidiani. Il rovescio della medaglia è che la curva di adattamento esiste: certe abitudini bash non si trasferiscono automaticamente.

Per questo, su server Debian 10, la scelta più equilibrata è spesso questa: installare Fish, provarlo come shell interattiva del tuo account tecnico, lasciare invariati gli script e verificare che la tua postazione operativa non dipenda da configurazioni troppo personalizzate. È una soluzione pratica, non ideologica.

Checklist rapida finale

Se vuoi una sequenza minima da seguire senza perdere tempo, puoi riassumere così:

  1. Verifica che il pacchetto esista: apt-cache policy fish.
  2. Installa Fish: sudo apt update && sudo apt install fish.
  3. Provalo senza cambiare la login shell: fish.
  4. Controlla la presenza in /etc/shells e, se serve, aggiungila con backup.
  5. Cambia la shell dell’utente con chsh -s /usr/bin/fish.
  6. Verifica con getent passwd "$USER" e ps -p $$ -o comm=.
  7. Se non ti serve più, rollback con chsh -s /bin/bash e rimozione pacchetto.

Assunzione operativa: stai lavorando su Debian 10 con privilegi sudo, repository standard attivi e nessun vincolo particolare su shell di login imposti da policy aziendale.