Warum funktioniert mein Alias ​​nicht über ssh?

9

Ich habe einen Alias ​​in meinem definiert .bashrc

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

Es ist sehr nützlich :) aber es funktioniert nicht über ssh:

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

Warum ist das so?

Zanna
quelle
1
.bashrcwird nur gelesen, wenn die Shell interaktiv ist.
user4556274
1
Wenn Ihr Alias ​​über ssh liegt, gibt es wahrscheinlich keine Farbe. Wenn Sie Ihren Alias ​​ändern, werden alias l.='ls -d .* --color'die Farben angezeigt. Ich dachte nur, ich würde das hinzufügen. Zumindest habe ich das erlebt.
Terrance
@Terrance Ich habe mich darüber gewundert ... Ich bekomme immer noch keine Farbe (und keine Spalten), obwohl ich Farbe (und Spalten) wie zuvor bekomme, nachdem ich den Alias ​​geändert habe (und mache source .bashrc)
Zanna
1
ah ha! Ich denke ich habe es. Versuchen Sie Ihren Alias ​​als alias l.='ls -dC .* --color'wo die CSpalten angezeigt werden.
Terrance
1
Ich habe die Antwort bearbeitet, um das Farbproblem zu beheben.
Matei David

Antworten:

10

Versuchen:

ssh localhost -t bash -ci l.

Hinweis:

  • Der Alias ​​sollte sich ~/.bashrcauf dem Remote-Server befinden, nicht auf Ihrem lokalen Computer.

  • Die -iOption weist bashan, eine interaktive Shell auszuführen. Aliase sind standardmäßig nur in interaktiven Shells aktiviert.

  • Die -tOption weist sshan, eine Pseudo-Tty zuzuweisen. Ohne diese bashsendet eine Warnmeldung , wenn im interaktiven Modus gestartet. Dies ermöglicht auch lsFarben. Ohne es müssten Sie verwenden --color=always, sehen Sie man ls.

  • Es gibt eine andere Möglichkeit, Aliase zu aktivieren, ohne das interaktive Flag zu setzen, nämlich shopt -s expand_aliases. Sie könnten also versuchen:

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

    Jedoch:

    • Ihre .bashrcMacht nur definieren Aliase , wenn die Shell es Sourcing interaktiv ist. In diesem Beispiel wäre die Shell zu diesem Zeitpunkt nicht interaktiv.

    • Wenn Sie versuchen, Aliase in derselben Zeile zu definieren, lesen Sie dies .

Matei David
quelle
1
das funktioniert .... zu deiner Erklärung, klar, aber ich bin sshfür mich selbst :)
Zanna
1
Ich meinte im Allgemeinen bei der Verwendung ssh. Ja, localhostdas ist kein Problem.
Matei David
ssh ... <cmd>wird beendet, wenn <cmd>fertig ist. Wenn Sie die Shell danach behalten möchten ls, versuchen Sie es ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David
Aha ich verstehe. Vielen Dank. Ich werde meine Kommentare löschen :)
Zanna