Mengapa alias saya tidak berhasil ssh?

9

Saya memiliki alias yang ditentukan di blog saya .bashrc

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

Ini sangat berguna :) tetapi tidak berfungsi melalui ssh:

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

Mengapa demikian?

Zanna
sumber
1
.bashrchanya dibaca jika shell bersifat interaktif.
user4556274
1
Dengan alias Anda lebih dari ssh, mungkin tidak akan ada warna, di mana jika Anda mengubah alias Anda alias l.='ls -d .* --color'maka warna akan muncul. Saya pikir saya akan menambahkan itu. Setidaknya saya mengalaminya.
Terrance
@Terrance Saya bertanya-tanya tentang itu ... Saya masih tidak mendapatkan warna (dan tidak ada kolom) walaupun saya mendapatkan warna (dan kolom) seperti sebelumnya setelah mengubah alias (dan melakukan source .bashrc)
Zanna
1
ah ha! Saya rasa saya mengerti. Coba alias Anda sebagai alias l.='ls -dC .* --color'tempat Ckolom ditampilkan.
Terrance
1
Saya mengedit jawaban untuk mengatasi masalah warna.
Matei David

Jawaban:

10

Mencoba:

ssh localhost -t bash -ci l.

catatan:

  • Alias ​​harus ada di ~/.bashrcserver jarak jauh, bukan di mesin lokal Anda.

  • The -ipilihan memberitahu bashuntuk menjalankan shell interaktif. Alias ​​diaktifkan secara default hanya di shell interaktif.

  • The -tpilihan memberitahu sshmengalokasikan pseudo-tty. Tanpa ini, bashmemancarkan pesan peringatan ketika dimulai dalam mode interaktif. Ini juga memungkinkan lswarna. Tanpanya, Anda harus menggunakan --color=always, lihat man ls.

  • Ada cara lain untuk mengaktifkan alias, tanpa mengatur bendera interaktif, yaitu shopt -s expand_aliases. Jadi Anda bisa mencoba:

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

    Namun:

    • Anda .bashrcmungkin hanya mendefinisikan alias jika shell sumbernya interaktif. Dalam contoh ini, shell tidak akan interaktif pada saat itu.

    • Jika Anda mencoba mendefinisikan alias pada baris yang sama, lihat ini .

Matei David
sumber
1
itu bekerja .... untuk penjelasan Anda, tentu, tapi saya sshsendiri :)
Zanna
1
Maksud saya secara umum saat menggunakan ssh. Ya, dengan localhostitu bukan masalah.
Matei David
ssh ... <cmd>keluar saat <cmd>selesai. Jika Anda ingin menyimpan cangkang setelahnya ls, coba ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David
Aha saya mengerti. Terima kasih banyak. Saya akan menghapus komentar saya :)
Zanna