Scribble at 2023-02-17 12:45:11 Last modified: 2023-02-17 13:45:09

いま、改めてビル・ジョイの「Cシェルへの手引き」を訳しているのだが、僕はどうも C Shell のセールス・ポイントと言われている history を評価できない。

まず、タイプする量を軽減するなどと言われても、そもそも自分が何をタイプしたのか覚えていなくてはいけないという負担の方が大きいと思う。常に履歴が表示されるならともかく、実質はコンピュータを使っているユーザが、自分で何をタイプしたのかという履歴を記憶していなければ、改めて history を利用したコマンドを使い様がないからだ。これは、要するに人がコンピュータの代わりをしているのと同じであって、本末転倒をプログラミングしたようなものだと言えるのではないか。

第二に、過去にユーザが何をタイプしたのかに応じて、"% !" の後に入力する引数はいくらでも文脈依存で結果が変わる(感嘆符と履歴番号のあいだにスペースを入れないこと)。これは、たとえばシェル・スクリプティングを書く状況では、スクリプトの中で何か実行したいコマンドを履歴から使うとすると、そこでは常に変数を使ってコマンドを指定することになるという、あまり筋の良くない(つまりセキュリティとして危険な)作法を身に着けることになるので、僕はお勧めしない。それに、そのようなスクリプトは明らかに自分自身で実行している一連のコマンドからなる履歴しか参照できないという制約があるため、途中で何か新しいコマンドを追加すると想定するコマンドの履歴が変わってしまい、そのたびに履歴から呼び出す方法を変えなくてはいけない可能性があり、メンテナンス性が低い。

このように、csh / tcsh のサイトを運営していても、もちろん僕はテキスト・エディタやシェルのユーザに多くいる狂信者ではない。危険だったり、現在では重要でもない機能は、もちろん捨て去ったり無視していいと思う。

加えて、僕は alias も推奨しない。理由は明らかで、システム管理者、とりわけ勤め人や委託業務でサーバの運用に携わる者は、自分の使いやすい環境に慣れ過ぎたり、自分がシステムを運用している条件や環境を当たり前だと思ってはいけないからである。これは、情報セキュリティの技術者(つまりは犯罪者やテロリストにも言える)の鉄則でもある。alias で自分の使いやすいように定義した独自のコマンドや変数を当たり前のように使っていると、ひとたび他人が構築したサーバで作業するときに、つい他人も独自に定義しているかもしれないコマンドや変数を自分で定義してある内容と同じであるかのように錯覚して使ってしまいかねない。しかし、仮に

alias la rm -rF /

などという危険な alias が定義されていたらどうか(もちろん、侵入された状況ではクラッカーにこういう定義を仕込まれるリスクが十分にある)。ls コマンドをタイプ・ミスして la と打ち込んでしまったら、とんでもない事態になるだろう。いや、実は特定のオプションを付けた ls コマンドの代用として "la" という alias を定義することはよくあるし、大半の csh や tcsh の ~/.cshrc ファイルには最初から定義されていたりする。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook