eshell 내에서 원격 호스트의 cwd로 응용 프로그램 실행


12

나는 종종 Eshell을 사용하여 원격 시스템에 연결합니다. 그 원격 시스템에서 때로는 현재 작업 디렉토리에서 스크립트를 실행하려고합니다. 일반 터미널에서 다음을 입력하십시오.

./my-script.sh

불행히도 Eshell 내부에서는 작동하지 않습니다.

~ $ 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 $ 

스크립트에 완전한 TRAMP 경로를 제공하는 경우에만 작동합니다.

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

.간단한 호출이 작동 하도록 Eshell이 자동으로 확장되도록 설득하는 방법이 있습니까?

해결 방법으로 현재 C-c .명령 줄에 현재 전체 경로를 삽입하는 바인딩 된 함수를 사용합니다 . 나는 .예상대로 행동 하는 것을 훨씬 선호합니다 .

답변:


11

의 버그 인 것 같습니다 eshell. 신고해야합니다.

나는 당신이 그것을 고칠 수 있다고 생각 합니다.

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

결론적으로, 문제는 tramp가 다음과 같은 형태의 원격 명령 행을 구성하게된다는 것입니다 (더 명확하게하기 위해 탈출을 제거하고 있습니다).

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

그렇기 때문에 당신은 "신비한"메시지를 보게됩니다. env

대신 생성 해야하는 것 (그리고 위의 명령으로 달성 한 것)은 다음과 같습니다

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

나는 트램프가 "/ ssh : remote1 : ..."이 유효한 원격 명령이 아니라는 것을 알 수있는 방법이 없기 때문에 버그가 eshell 측에 있다고 생각합니다. multi-hop tramp에 문제가 있지만 어쨌든). 그리고 명령이 명시 적으로 트램 경로 일 때 eshell은 제정신을 수행합니다.


원활하게 작동합니다. 이 솔루션에 감사드립니다.
Boccaperta-IT

1
실제로 버그이며 업스트림에 이미 수정되었습니다.
rekado

@rekado, 어떤 emacs 버전이 수정 되었습니까?
djhaskin987

이 커밋으로 해결되었다고 생각합니다 : git.savannah.gnu.org/cgit/emacs.git/commit/…
rekado

이 버그가 발생하여 위의 수정 사항을 적용해야했습니다 (문제를 해결합니다 --- 감사합니다). Mac에서 homebrew를 통해 설치된 emacs 24.5.1을 실행 중입니다. 업스트림 수정으로 문제가 해결되지 않습니다.
butala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.