2012-07-23 81 views
3

當我重新啓動它,我做這樣的事情經常(每週)在Emacs:設置emacs的貝殼

  1. 打開連接到RSH服務器的shell,執行某些命令,重命名緩衝
  2. 爲幾個不同的遠程機器重複step1

我在想:有沒有辦法讓我可以在啓動腳本中硬編碼這些設置?

+0

幾乎任何東西都可以使用emacs。您需要在lisp中編寫自定義函數,並將其放入.emacs文件中。 – EdH 2012-07-23 02:06:39

+0

@愛德華啊,我知道它應該是可能的,因爲我沒有做很多的EMAC定製,並且幾乎沒有寫任何LISP函數,你能指點我一些這樣的例子。 – zinking 2012-07-23 02:12:51

+0

您是否必須輸入密碼才能連接到遠程服務器? – Thomas 2012-07-23 02:55:37

回答

3

下面是啓動一個外殼,SSH-ES到主機的功能,並拖放到一個交互shell前運行的命令:

(defun start-remote-shell (host command) 
    (shell (format "*shell-%s*" host)) 
    (sleep-for 0 500) ; Wait half a second for the prompt to appear 
    (insert (format "ssh -t %s %s'; exec bash -i'" 
        (shell-quote-argument host) 
        (shell-quote-argument (shell-quote-argument command)))) 
    (comint-send-input)) 

你可以把這個片段到您的.emacs文件,其次是你想具體的調用,如:

(start-remote-shell "server-one" "apache start") 
(start-remote-shell "server-two" "mysql start") 
(start-remote-shell "server-three" "foo start") 
+0

我遇到ansi-color-apply-on-region「標記不指向任何地方」我做了一些搜索,有人建議等待提示時間不夠長,但是在我將其更改爲3秒後,我仍然有同樣的問題。 – zinking 2012-07-27 08:42:54

0

我覺得這樣的事情可以幫助你:

(mapc (lambda (server) 
    (shell (concat "*shell-" server "*")) 
    (insert "ls") 
    (comint-send-input) 
    (insert "ps ax") 
    (comint-send-input)) 
    '("server1" "server2")) 

正如你所看到的,插入寫入控制檯,並且使用comint-send-input就像在終端中敲回車鍵。 在這個例子中,ls和ps將在兩個shell緩衝區中執行

+0

是的,打錯了答案 – 2012-07-23 17:26:59