bomb)と言うものがある。このコマンドを実際に実行してはいけない。上書きしているというのも特筆すべき(??)点である。組み込みコマンドを上書きできるといろいろ悪さができそうなので、いろいろな悪さの仕方とそれの対策を考えてみた。通常のコマンド汚染とその対策まず組み込みコマンドの話をする前に、通常のコマンドを関数で上書きするところから始める。zshこれだと「そんなものはない」が出力されて終わる。この状態でちゃんとzshを実行するためには以下のどちらかを実行すれば良い。emacs="vim"これはよく見る(???)戦争の火種である。これを仕掛けられたemacsユーザは落ち着いて以下のコマンドのどちらかを入力してほしい。#aliasを無視してコマンドを実行する組み込みコマンド汚染さて、本題に戻る。ように組み込みコマンドが上書きできるということは、commandコマンドもunsetコマンドも書き換えられてしまう危険があるということだ。組み込みコマンドを汚染されたときに、最後に頼りになるのはその名の通りbuiltinコマンドだ。command上のコマンドを実行したときの挙動は以下のようになる。unsetも実行できる。unset潰しもちろんこのbuiltinコマンドも関数定義により汚染することができる。builtin、command、unsetの3つを一度に潰されると打つ手はない。関数定義をするときに、その名前がすでにaliasに登録されている引数を持つコマンドのエイリアスである場合はエラーが出てくる。解釈されてしまうようである。--"とすれば、builtinという名の関数を定義することはできなくなる。unaliasされたり、$PATHにbuiltinコマンド置かれたら終わりだって?知らんな追記:aliasでは対策ができなかったこちらをご覧ください。いう関数宣言から守ることはできなかった。標準エラー出力も表示できるようになっているはずなのに、4行目に関してエラーが出ない。これはシェルスクリプト内においてはaliasが参照されないことを意味する。コメントをキャンセルメールアドレスが公開されることはありません。WordPress%d人のブロガーが「いいね」をつけました。