Browse Tag: zsh

zsh であるコマンドを履歴に登録しない方法

サーバをメンテナンスするとき、シェル経由で作業することが多いのですが、rm や sudo のコマンドが履歴に登録されてしまうと誤って使ってしまう可能性があります。

そこで、zsh であるコマンドを履歴に登録しない方法を調査してみました。

具体的には、HIST_IGNORE_SPACE というオプションをするこで、先頭がスペースで始まるコマンドは履歴に登録しない設定ができます。

この設定をして、さらに次のようにエイリアスを設定してみました。

alias rm=’ rm -i’

alias sudo=’ sudo -H’

こうすることで、rm と sudo コマンドは履歴に登録しないようになります。意図的にコマンドを履歴に登録させないようにするには、先頭にスペースを入れるだけでいいのですが、忘れてしまうこともあるのでエイリアスを設定しておくと便利です。

sudo コマンドは微妙なところですが、sudo コマンドでオペミスをしてしまったときの影響を考えると、サーバでは設定しておくが無難なのかなぁと思います。

サーバをメンテナンスするとき、誤ってコマンドを実行してしまったオペミスが発生することがよくあることなので、できる限りオペミスをなくす環境を作りつづけていくことは重要なことだと思います。

とは、いってもなるべく実サーバにログインしないように自動設定やリモート管理を行うというがサーバを運用する上で大事なことだと思います。

zsh の umount コマンドを正しく補完する方法

いつも Mac OSX 10.5 で、最新の zsh-devel を使っていますが、umout コマンドを入力してから補完させようと Tab キーを押すと、次のようなエラーが発生することに気がついた。

  readlink: illegal option — q

  usage: readlink [-n] [file …]

たくさん、このエラーがでるので修正しようと調べてみると、mount コマンドの補完関数である _mount の不具合であることに気がついた。

そこで、自分のホームディレクトリの .zfunctions に zsh の最新版に _mount を差しかえてみた。

再度試してみると、今度は次のようなエラーが発生した。

  _mount:889: bad pattern: (#m)\[0-7](#c3)

どうも正規表現がおかしいみたい、該当コードをみてみたが複雑すぎて理解できなかったので、とりあえずコメントアウトしてみた。

さらに umount コマンド補完を試してみたら、うまくいった!!!

これで問題ないだろうと、Fedora Core のサーバの設定ファイルも同じにしてみたら、今度は /sbin/mount コマンドがないというエラーに遭遇してしまった。調べてみると、/bin/mount に配置されている。OSX は、/sbin/mount だったのに。。。仕方がないので mount コマンドをフルパスで記述しているところを mount に変更してみた。