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.