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?


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 .


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.