이맥스에서 임의의 쉘 명령을 자동으로 실행하는 법?


4

나는 이맥스의 열등한 껍질을 사용하거나 껍질만을 자주 사용한다. ML 알 고스에서 주로 일하기 때문에 내 명령에 언젠가는 오랜 시간이 걸립니다. 이맥스 셸에서 실행되는 모든 명령의 자동 타이밍을 활성화하여 추가 / 못생긴 코드를 추가 할 필요가 없으며 실행 타이밍을 "미리 생각할 필요가 없습니다". 명령을 실행할 때 실행 시간이 자동으로 기록되어야합니다 (별도의 버퍼로 인쇄하는 것이 가장 좋음). 그래서 일부 매개 변수가 갑자기 긴 시간이 걸리는 경우 나중에 런타임에 기록 할 수 있습니다. 감사합니다. 감사합니다.

답변:


0

이 문제를 임시 해결책으로 처리하는 한 가지 방법은 쉘 프롬프트에서 시간을 표시하도록 설정 한 다음 실행할 때마다 작업이 완료 되 자마자 이전 시간 소인과 새 시간 소인을 갖게하는 것입니다. 이것은 새로운 프롬프트를 얻고 갱신 된 시간을 갱신하기 위해 명령을 실행하기 전에 누를 것을 요구할 수 있습니다. 그러나 이것은 한동안 정확하지 않은 타이머를 원할 때 큰 문제는 아닙니다.

다음과 같은 프롬프트를 얻으려면 15:01:54 MyPath/MyDir> bash에서

export PS1='\t \[\033[01;32m\]\w>\[\033[00m\] '

편집하다 Windows의 경우

PROMPT $T $P$G

같은 것을 얻기 위해 17:07:34.60 C:\Programs\Console2>


이맥스에서 쉘의 셸 프롬프트를 어떻게 바꿀 수 있는지 알고 싶습니까? 나는 주로 파이썬 셸과 일반 셸 (M-x 셸)을 사용하며 명령을 사용하려고했지만 "시스템이 지정된 경로를 찾을 수 없습니다."라는 오류로 실패했습니다. 내가 창문에 있기 때문일 수 있습니다.
Pushpendre

@ pushpen 나는 대답에 대한 Windows 옵션을 편집했다.
gt6989b

감사합니다 gt6989b. 당신은 내 껍질을 고쳤다 :) 만약 거기에 이맥스 파이썬 셸뿐만 아니라 이렇게 할 수있는 방법이 있었다. 어쨌든 나는 너에게 맞음을 표시하고있다.
Pushpendre

1

gt의 대답에 영감을 받아 파이썬에서이 작업을 수행 할 수있는 방법을 찾았습니다. 파이썬 인터프리터의 경우,
다음 코드를에 추가하십시오. usercustomize.py 내부 site-packages 예배 규칙서.

import time, sys

class ShowTime(object):
    def __str__(self):
        return time.strftime("%c", time.localtime())+" >>> "

sys.ps1=ShowTime()

이렇게하면 다음과 같은 프롬프트가 추가됩니다. 03/21/13 13:10:42 >>>

편집하다

위와 같이하면 send-region 및 send-buffer와 같은 python 모드의 유용한 기능이 중단됩니다. 기본적으로 파이썬 모드는 프롬프트가 특정 정규 표현식과 일치 할 것으로 예상합니다. (옆으로 : 더 낮은, 더 기본적인, 코인 트 - 모드를 변경하는 것은 아무런 의미가 없다는 것을 의미합니다.) 어쨋거나, 우리는 python.el에서 변수 python-shell-prompt-alist를 우리가 가지고있는 프롬프트와 일치하도록 변경합니다 설정 한 다음 python.elc를 삭제 한 다음 다시 시작하십시오.

일찍이 :

(defcustom python-shell-prompt-alist
   '(("ipython" . "^In \\[[0-9]+\\]: *")
    (t . "^>>> "))

지금 :

(defcustom python-shell-prompt-alist
  '(("ipython" . "^In \\[[0-9]+\\]: *")
    (t . "^[0-9][0-9]_[0-9][0-9]:[0-9][0-9]:[0-9][0-9]>>> "))

이것은 유형의 프롬프트와 일치합니다. time.strftime("%d_%H:%M:%S", time.localtime())+">>> "


0

나는 리눅스에서 나를 위해 일하는 방법이있다. 함수에 따라 다릅니다. time. 어쩌면 창 아래에 비슷한 기능이 있습니다.

쉘 안의 프로그램을 사용하고 싶지 않다면이 방법은 좋지 않습니다. python 대화식으로 이것을 구현하는 방법에 대한 아이디어로 보아라. 그러나 쉘 * -buffer 내에서만 쉘 / cmd 함수를 수행하지 않는 한 내가 정말로 추천하는 것은 아니다.

여기 간다:

.emacs 파일에 이것을 추가하십시오.

(defun my-send (proc cmd)
    (comint-simple-send proc (concat "time " cmd)))
(setq  comint-input-sender 'my-send)

명령을 실행할 때마다 다음과 같이 표시됩니다 (이 예 : 1 초 동안 잠자기).

$ sleep 1

real    0m1.132s
user    0m0.000s
sys     0m0.000s

이 질문은 정말로 나를 괴롭혔다. 나는 단지 해결책을 찾아야했다 :)
McNisse

있어 이 그래서 대답 Windows에서 작동하도록 할 수 있습니다. 귀하의 솔루션은 루비, 리스프와 같은 이맥스의 모든 repl에 영향을 미칩니 까? 멋지다.
Pushpendre

쉘 모드가 아닌 다른 모드에서 시도하지 않았습니다. 내가 믿을만한 생각을 할 때, 다른 통역사를 망칠 것입니다. 왜냐하면 당신이 원하기 전에 다른 명령을 입력하기 때문입니다. 이 솔루션은 comint-mode를 사용하는 모든 것에 영향을 미칩니다. 어떻게 든 재설정해야한다고 생각하십시오. comint-input-sendercomint-simple-send 그 (것)들을 일하기 위하여. 나는 그것을 테스트하고 나의 대답을 업데이트 할 필요가있을 것이다.
McNisse

오, 그래, 고맙게도 나는 파이썬, bash 및 cmd에서 그것을 할 수있는 방법을 발견하고 귀하의 답변은 적절한 조건으로 조정할 수 있습니다. 우리가 emacs에서 처리한다면 하위 프로세스의 출력을받는 함수에서 처리해야한다고 생각합니다. 그러면 우리는 일종의 이맥스 원시 시간 함수를 호출하고 그것을 앞에 붙일 수 있습니다. 어떤 기능이 출력을 수신했는지 알고 있습니까?
Pushpendre

내 첫 번째 시도는 comint-output-filter-functionscomint-input-filter-functions 계산 시간을 수정하는 데 실패했지만 실패했습니다.
McNisse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.