2013-02-01 17 views
5

私はbashスクリプトで特定のコマンドの実行を避けなければなりません。
私はそうするためにpreexecトラップを使うと考えました。特定のコマンドの実行を避けることは可能ですか?

私は 'ax'コマンドをaxampleのためだけに避けたいとしましょう。 私がやったことは、以下の基本的である:

#!/bin/bash 

function preexec() 
{ 
    if test $(echo "$BASH_COMMAND" | cut -d " " -f1) == "source" 
     then 
      echo ">>> do not execute this" 
     else 
      echo ">>> execute this" 

    fi 
} 
trap 'preexec' DEBUG 

echo "start" 
source "source.sh" 
echo "go on" 

exit 0 

アイデアが正常に動作しますが、この時点で私が言ったコマンドの実行を回避する方法を知りません。
これを解決する方法はありますか?

+0

「ソース」は他のほとんどのコマンドとは異なり、シェルの組み込みであることに注意してください。それにもかかわらず興味深い質問。 –

+0

私のコメントは愚かかもしれませんが、スクリプトを変更できるので、これらのコマンドをコメントアウトして保存してみませんか?またはコマンドはユーザーの入力から来ていますか?あなたは正規表現でそれらをチェックすることができます。または私はあなたの要件を理解していない? – Kent

+0

@Kentの鉱山は単なる簡単な例です。私が必要とするのは、発生する可能性のある特定の条件の下で特定のコマンドの実行を防ぐことです。 –

答えて

2

回避策の1つは、スクリプトの完了後に何もせず、コマンドの定義を解除するコマンドのエイリアスを定義することです。これが機能するためにエイリアスは、スクリプト自体の中で宣言する必要があります。

alias source=: 
## The actual script source here... 
unalias source 
1

sourceと呼ばれる機能を使用してsourceコマンドを再定義します。

関数をエクスポートできます。

source() { builtin source /dev/null; return 0; } 
source() { read < /dev/null; return 0; } 
source() { :; return 0; } 
export -f source 
+0

コマンドは必要ありません。戻り値は十分です。 'ソース(){戻り値1; } 'コマンドが正常に実行されなかったことを通知するのに最適かもしれません。 –

関連する問題