2024-02-19

EMACS LISPとシェバン

AWKやSEDのようにEMACS LISPをスクリプト言語的な使い方ができるのかを確認するため、簡単な例で試してみました。以下のようなファイルを作成し、実行ビットを立て、動かしてみます。

#!/usr/bin/emacs --script
(princ "Hello, world.\n")


動かしてみると、次のようになりました。

Loading /etc/emacs/site-start.d/00debian.el (source)...
Loading /etc/emacs/site-start.d/50tcsh.el (source)...
Hello, world.

 

「Hello, world.」という文字列は出たのですが、その前に余計な出力が現れています。これらは標準エラー出力に出ているようなので、パイプで繋いだとしても影響はないのかもしれませんが、パイプ全体として余分なメッセージが出てしまうことになるので、できれば出ないようにしておきたいところです。


オプション「--no-site-file」を指定すればロードされないことが分かりました。しかしシェバンの行には、既に「--script」を指定しているので、「--no-site-file --script」のように複数指定すると、うまく動きません。「execve(2)」では「Linux では、インタプリタ名 interpreter に続く文字列全体がインタプリタに 1個の引き数として渡される。」と記述されており、複数個のオプションとは認識しないようです。

 

そこで、/usr/local/bin/emcsとして、次のような内容のファイルを作成します。その上でシェバンには「#!/usr/local/bin/emacs --script」とすれば、期待した動きをしてくれました。

#!/bin/sh
/usr/bin/emacs --no-site-file $*
#[EOF]


0 件のコメント:

コメントを投稿