ナンクル力学系

学んだ事を書き連ねていこう。

Emacsでシェルコマンドの標準出力を文字列として受け取る

leave a comment »

host name別で読み込む設定ファイルを変えてやろうと思ってEmacs Lispでホスト名を知りたい,に書かれてあった方法を試してみたらなぜか(getenv “HOSTNAME”)でhost nameが取れない.仕方ないからシェルコマンドからhost nameを取得しようと思ったら,文字列として受け取る(変数の中に格納する)方法で行こうかと思ったけど,いい方法が見つからなかった...ので作ってみた.

(defun get-stdout-shell-command (command)
  (interactive)
  (set-buffer "*Shell Command Output*")
  (erase-buffer)
  (call-process command nil "*Shell Command Output*" nil)
  (delete-char -1); delete line break
  (buffer-string))

(defun get-stdout-shell-command-arg (command arg)
  (interactive)
  (set-buffer "*Shell Command Output*")
  (erase-buffer)
  (call-process command nil "*Shell Command Output*" nil arg)
  (delete-char -1); delete line break
  (buffer-string))

(get-buffer-create "*Shell Command Output*")

(setq hostname (get-stdout-shell-command "hostname"))

これで,変数hostnameにhost nameが入ってるはず.初めは(shell-command  “hostname” “*Shell Command Output*”)とかやってたけど,バッファが開いてしまうのでcall-processを使うことにした.elisp初心者なので頭の悪いことしているかもしれない.

(getenv “HOSTNAME”)動いてくれたほうが嬉しいなあ.なんで動かないんだろう?

Written by tkf

October 26, 2008 at 2:15 pm

Posted in programming

Tagged with

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: