ある web ページで、僕の書いたものを引用されていたのだが、
$ sudo `which <command>`
と僕が書いていたのを、
$ sudo `which <command> <引数>`
と誤解されているようだったので、コメントを入れておいたのだった。
そもそも、何故、
$ sudo `which <command>`
などということをしなければならないのか、というと、これはちょっと前に sudo の仕様が変更されたことに起因している。以前は、sudo を使って管理者権限でコマンドを使うとき、そのコマンドの実行において、sudo を実行したユーザの環境変数が反映されるようになっていた。だから、root に妙な PATH を指定することなしに管理者権限のコマンドを使うのに、sudo は結構重宝な道具だったのである。
しかし、これはセキュリティ的にはよろしくない状況である。しかも、何か操作ミスがあったときのリスクも大きくなる。だから、ちょっと前から sudo は仕様を変更して、sudo 専用の環境変数のセットが用意され、sudo でコマンドを実行するときにはその環境変数が反映されるようになっている。
このような状況になると、あまりメジャーでないディレクトリにあるバイナリを起動しようとするときに、そこに PATH が通っていないことが問題になる。当然フルパスを書けばいいのだが、それは面倒極まりない。こういう場合、UNIX の流儀では、小さなコマンドを組み合わせて解決することになるわけだが、そこで先の、
$ sudo `which <command>`
が登場するわけである。
(b)sh 系のシェルでは、バッククォートで囲まれた中身はコマンドとして展開される。つまり "which <command>" の実行結果が文字列としてここに嵌め込まれるわけだ。ここで重要なのは、"which <command>" は、sudo を実行するユーザの権限で実行されることである。つまり、このユーザの環境変数で PATH が通っていれば、このような書き方をすることで、フルパスを sudo に渡すことができるのである。
ここまで分かれば、何故引数をバッククォートの中に入れてはいけないのか、が分かろうというものだろう。うーん……しかしなあ。僕は何も文献など読まずに、この記法を見ただけでそのココロが分かったのだが、そんなに難しいものなのだろうか? 説明が足らなかったのかなあ。
ThinkPad X61 のファンがいよいよダメになってきた。ファンの回転が変化するときに「カラカラカラカラ」と派手な音がする。真夜中に使うのが少し憚られるような状況になった。
本来、X61 のファンはユニットアッセンブリーになっていて、CPU と GPU から熱を伝える銅製のヒートパイプと、シロッコファンが密着した同じく銅製のフィンが込みになっている。しかし、全て交換するのはあまりに勿体ないので、ファンだけを某オークションで入手して交換することにした。
HDD → メモリ蓋 → キーボード → 外周部 の順番に分解していく。ディスプレイと指紋認証センサのメンブレンケーブルを外し、HDD コネクタ周辺のカバーを外し、PCMCIA カードスロットのネジを外すと、メインボードが外れる。これを裏返して、ヒートシンクとファンを取り外す。予想通り、CPU の冷却グリスが劣化していたが、今回はそのまま少量のアルコールで練って、ファンを交換してからそのまま取り付けた。途中、無線 LAN と bluetooth のスイッチ(これが機械的に ON/OFF できるのがらしくっていいけど)のノブが外れたりして往生したけれど、作業自体はスムースに進められた。
で、立ち上げてファンの回転数を監視していると……え、こんなに静かだったのか? という位に静かになった。ぐずぐずせずにさっさと換えるんだったなあ……しかも、冷却速度がぐんと上がった。いい加減ファンのモーターがヘタっていたんだなあ、と改めて実感したのだった……
teX Live 2013 pretest 版を使い始めているわけだけど、ひとつ困ったことがある。どうやら LuaTeX / LuaLaTeX が使いものにならないようなのだ。具体的には、fontspec を読み込もうとしたり、mkluatexfontdb でフォントデータベースを構築しようとしたりすると、エラーを吐いてしまうのだ。
たとえば、
\documentclass[a4paper]{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{TeXGyreTermes}
\begin{document}
Hello, world!
\end{document}
という内容のファイルを lualatex で処理しようとすると、
This is LuaTeX, Version beta-0.76.0-2013041612 (rev 4627)
restricted \write18 enabled.
(./test.tex
LaTeX2e <2011/06/27>
LuaTeX adaptation of babel and hyphenation patterns for
english, dumylang, nohyphenation, loaded.
(/usr/local/texlive/2013/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2013/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2013/texmf-dist/tex/latex/fontspec/fontspec.sty
(/usr/local/texlive/2013/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/local/texlive/2013/texmf-dist/tex/latex/l3kernel/l3names.sty
(/usr/local/texlive/2013/texmf-dist/tex/latex/l3kernel/l3bootstrap.sty
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/luatex.sty
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/ifluatex.sty)
(/usr/local/texlive/2013/texmf-dist/tex/latex/etex-pkg/etex.sty)
(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/luatex-loader.sty
(/usr/local/texlive/2013/texmf-dist/scripts/oberdiek/oberdiek.luatex.lua)
! LuaTeX error ...ive/2013/texmf-dist/scripts/oberdiek/oberdiek.luatex.lua:55:
bad argument #1 to 'insert' (table expected, got nil)
stack traceback:
[C]: in function 'insert'
...ive/2013/texmf-dist/scripts/oberdiek/oberdiek.luatex.lua:55: in
main chunk
[C]: in function 'dofile'
[string "\directlua "]:6: in main chunk.
l.139 }
%
?
……というようになる。また、mkluatexfontdb を実行すると、
error loading module otfl-font-nms from file
/usr/local/texlive/2013/texmf-dist/tex/luatex/luaotfload/otfl-font-nms.lua:
.../2013/texmf-dist/tex/luatex/luaotfload/otfl-font-nms.lua:496:
invalid escape sequence near '\.'
……というようになる。
僕は未だ多くの書きものを pLaTeX + dvipdfmx でタイプセットしているので、このことで仕事ができない、という状況になっているわけではないのだが、しかし困っているのには変わりがない。探してみると、僕以外にも同様の問題で困っている方はおられるようだ。うーん。
【追記】4月19日、luaotfload が 26718 から 30026 に update されたことで mkluatexfontdb は走るようになった模様。しかし lualatex の動作はまだおかしなまま。
【追記2】http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=992 を参考に ad hoc な変更を施し、無事に LuaTeX も使えるようになりました。
先日書いた通り、tlpretest はシンボリックリンクの改変が不十分な状態だった。しかし、今日インストールし直してみたところ、それらの問題は一応の解決をみたらしい。texmf にリンクされていたファイルは texmf-dist へちゃんとリンク先が変更されている。
では早速使おうとすると、何やらエラーが……ん? ~/.texlive2013 が何とか、って? ということで、~/.texlive2013 をばさっと削除したら、何も問題なく使えている。これでようやく、本格的に tlpretest に移行できるかな。