一時的にコマンドをスタブ化する

スクリプトのUTをする際に、スクリプト内の一部のコマンドを実行させずに正常終了だけ返すようにスタブ化したい時がよくある。そんな時のためにコマンドのスタブ化の手順について説明する。
 
【コマンド実行の仕組み】
そもそもコマンド実行の仕組みを理解する必要がある。
 
プロンプト上でコマンドを実行すると、環境変数PATHに設定されている左端のディレクトリから順に、実行されたコマンド名のファイルを探しにいき、初めに見つかったファイルを実行する。見つからなければ「コマンドが見つかりませんでした」となる。
 
例えば環境変数PATHが以下の場合、
echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
 
sshコマンドを実行すると、/usr/local/sbin、/usr/local/bin・・・と順番にsshというファイルがあるか探していき、/usr/bin/sshを見つけてコマンドが実行される。
 
ということはつまり、
 
/usr/binより左側にあるディレクトリにsshというダミーの実行ファイルを置いておけばsshコマンドをスタブ化できる。
 
ただし、既存のPATHに登録されているディレクトリはシステム的に重要な部分のため、万が一なにかあると困るので、全く関係ないディレクトリにダミーの実行ファイルを作成し、PATHにそのディレクトリを追加するのがよい。
 
環境変数PATHを変更するとそのセッションでのみPATHが変更される。つまり同じユーザで複数画面でログインしていたとしても、変更を実施した画面のセッションしか変更されない。また再度ログインし直せばPATHは元の値に戻る。
 
【設定手順】
①スタブ用のコマンド(実行ファイル)を作成する
vi /home/user/ssh
    #!/bin/sh
    exit0 
 ※リターンコード0を返すだけのシェル
 
②環境変数のPATHに「/home/user」を追加
export PATH=/home/user:$PATH
 
which ssh
/home/user/ssh  ←/usr/sbin/sshから/home/user/sshに変わっている
 

スポンサーリンク
勉強wikiの下部広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
勉強wikiの下部広告

コメントをどうぞ

メールアドレスが公開されることはありません。

CAPTCHA