Jalankan aplikasi di cwd pada host jarak jauh dari dalam eshell

12

Saya sering menggunakan Eshell untuk terhubung ke sistem jarak jauh. Pada sistem jarak jauh itu saya terkadang ingin menjalankan skrip di direktori kerja saat ini. Di terminal reguler saya ketikkan ini:

./my-script.sh

Sayangnya, di dalam Eshell ini tidak berfungsi:

~ $ cd /remote1:~
/ssh:remote1:/home/rekado $ ./my-script.sh 
env: /ssh:remote1:/home/rekado/my-script.sh: No such file or directory
/ssh:remote1:/home/rekado $ 

Ini hanya berfungsi jika saya memberikan jalur TRAMP lengkap ke skrip:

/ssh:remote1:/home/rekado $ /ssh:remote1:/home/rekado/my-script.sh 
It works!
/ssh:remote1:/home/rekado $ 

Apakah ada cara untuk meyakinkan Eshell agar berkembang .secara otomatis sehingga permohonan yang lebih sederhana berhasil?

Sebagai solusinya, saya saat ini menggunakan fungsi terikat C-c .yang menyisipkan path lengkap saat ini di baris perintah. Saya lebih suka .berperilaku seperti yang diharapkan.

rekado
sumber

Jawaban:

11

Itu terlihat seperti bug eshell, Anda harus melaporkannya.

Saya pikir Anda dapat memperbaikinya dengan

(defadvice eshell-gather-process-output (before absolute-cmd (command args) act)
  (setq command (file-truename command)))

Intinya, masalahnya adalah bahwa gelandangan akhirnya membangun garis perintah jarak jauh dari formulir (saya menghapus beberapa pelarian untuk membuatnya lebih jelas):

cd /home/rekado && exec env PS1='/ssh:remote1:/home/rekado $' /ssh:remote1:/home/rekado/my-script.sh

Itulah sebabnya Anda berakhir dengan pesan "misterius" itu env

Apa yang dibutuhkan untuk menghasilkan (dan itulah yang dicapai oleh perintah di atas) adalah sesuatu seperti

cd /home/rekado && exec env PS1='/ssh:remote1:/home/rekado $' /home/rekado/my-script.sh

Saya percaya bug ada di sisi eshell, karena gelandangan tidak memiliki cara untuk mengetahui bahwa "/ ssh: remote1: ..." bukan perintah jarak jauh yang valid (meskipun jika itu, kita mungkin akan memiliki lebih banyak masalah dengan tramp multi-hop ... tapi lagian). Dan eshell memang melakukan hal yang waras ketika perintah secara eksplisit merupakan jalur gelandangan.

Sigma
sumber
Bekerja dengan lancar. Terima kasih atas solusi ini.
Boccaperta-IT
1
Ini memang bug dan sudah diperbaiki di hulu.
rekado
@ Kunado, Emacs versi apa yang diperbaiki?
djhaskin987
Saya yakin ini sudah diperbaiki dengan commit ini: git.savannah.gnu.org/cgit/emacs.git/commit/…
rekado
Saya menemukan bug ini dan harus menerapkan perbaikan di atas (yang memperbaiki masalah --- terima kasih untuk itu). Saya menjalankan emacs 24.5.1 yang diinstal melalui homebrew di mac. Perbaikan hulu tidak memperbaiki masalah bagi saya.
butala