Dlaczego mój alias nie działa nad ssh?

9

Mam zdefiniowany alias .bashrc

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

Jest to bardzo przydatne :), ale nie działa poprzez ssh:

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

Dlaczego?

Zanna
źródło
1
.bashrcjest odczytywany tylko wtedy, gdy powłoka jest interaktywna.
user4556274,
1
W przypadku aliasu nad ssh prawdopodobnie nie będzie koloru, a jeśli zmienisz alias na, alias l.='ls -d .* --color'wówczas pojawią się kolory. Pomyślałem, że to dodam. Przynajmniej tego doświadczyłem.
Terrance
@Terrance Zastanawiałem się nad tym ... Nadal nie otrzymuję koloru (i żadnych kolumn), chociaż otrzymuję kolor (i kolumny) jak wcześniej po zmianie aliasu (i zrobieniu source .bashrc)
Zanna
1
aa ha! Myślę, że rozumiem. Wypróbuj swój alias jako miejsce, w alias l.='ls -dC .* --color'którym Cwyświetlane są kolumny.
Terrance
1
Zredagowałem odpowiedź, aby rozwiązać problem z kolorem.
Matei David,

Odpowiedzi:

10

Próbować:

ssh localhost -t bash -ci l.

Uwaga:

  • Alias ​​powinien znajdować ~/.bashrcsię na zdalnym serwerze, a nie na komputerze lokalnym.

  • Ta -iopcja mówi basho uruchomieniu interaktywnej powłoki. Aliasy są domyślnie włączone tylko w interaktywnych powłokach.

  • Te -topcje mówi sshprzeznaczyć pseudo-tty. Bez tego bashemituje komunikat ostrzegawczy po uruchomieniu w trybie interaktywnym. Umożliwia to także lskolory. Bez tego musiałbyś użyć --color=always, rozumiesz man ls.

  • Istnieje inny sposób włączenia aliasów, bez ustawiania flagi interaktywnej, a mianowicie shopt -s expand_aliases. Więc możesz spróbować:

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

    Jednak:

    • Twoja .bashrcsiła określić tylko aliasy jeśli powłoka jest interaktywna pozyskiwanie go. W tym przykładzie powłoka nie byłaby wtedy interaktywna.

    • Jeśli spróbujesz zdefiniować aliasy w tym samym wierszu, zobacz to .

Matei David
źródło
1
to działa .... według twojego wyjaśnienia, jasne, ale myślę ssho sobie :)
Zanna
1
Miałem ogólnie na myśli podczas korzystania ssh. Tak, localhostto nie jest problem.
Matei David,
ssh ... <cmd>wychodzi, gdy <cmd>jest zrobione. Jeśli chcesz później zachować powłokę ls, spróbuj ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David,
Aha rozumiem. Wielkie dzięki. Skasuję swoje komentarze :)
Zanna,