Perché il mio alias non funziona su ssh?


9

Ho un alias definito nel mio .bashrc

alias l.='ls -d .* --color=auto'

È molto utile :) ma non funziona tramite ssh:

$ ssh localhost l.
bash: l.: command not found

Perché?


1
.bashrcviene letto solo se la shell è interattiva.
user4556274

1
Con il tuo alias su ssh, probabilmente non ci sarà alcun colore, dove se cambi il tuo alias in alias l.='ls -d .* --color'allora i colori appariranno. Ho pensato di aggiungere questo. Almeno lo stavo vivendo.
Terrance

@Terrance Me lo stavo chiedendo ... Non ho ancora nessun colore (e nessuna colonna) anche se ottengo il colore (e le colonne) come prima dopo aver cambiato l'alias (e facendo source .bashrc)
Zanna

1
ah ah! Penso di averlo capito. Prova il tuo alias come alias l.='ls -dC .* --color'dove sono Cmostrate le colonne.
Terrance

1
Ho modificato la risposta per risolvere il problema del colore.
Matei David,

Risposte:


10

Provare:

ssh localhost -t bash -ci l.

Nota:

  • L'alias dovrebbe trovarsi ~/.bashrcsul server remoto, non sul tuo computer locale.

  • L' -iopzione dice bashdi eseguire una shell interattiva. Gli alias sono abilitati per impostazione predefinita solo nelle shell interattive.

  • Le -topzioni indicano sshdi allocare una pseudo-tty. Senza questo, bashemette un messaggio di avviso quando avviato in modalità interattiva. Ciò consente anche i lscolori. Senza di essa, dovresti usare --color=always, vedi man ls.

  • C'è un altro modo per abilitare gli alias, senza impostare il flag interattivo, vale a dire shopt -s expand_aliases. Quindi potresti provare:

    ssh localhost 'bash -c "shopt -s expand_aliases; l."'

    Però:

    • Il tuo .bashrcpotremmo definire solo gli alias se la shell di sourcing è interattivo. In questo esempio, la shell non sarebbe stata interattiva in quel momento.

    • Se si tenta di definire gli alias sulla stessa riga, vedere questo .


1
che funziona .... per la tua spiegazione, certo, ma io sto sshpensando a me stesso :)
Zanna

1
Intendevo in generale quando si utilizzava ssh. Sì, con localhostquesto non è un problema.
Matei David,

ssh ... <cmd>esce al <cmd>termine. Se vuoi mantenere la shell dopo ls, prova ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David,

Ah capisco. Molte grazie. Ho intenzione di eliminare i miei commenti :)
Zanna
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.