5

bash スクリプトで特定のコマンドを実行しないようにする必要があります。
そのために preexec トラップを使用することを考えました。

axampleのためだけにコマンド「source」を避けたいとしましょう。私がやったことは基本的に次のとおりです。

#!/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

アイデアはうまくいきますが、この時点では、上記のコマンドの実行を回避する方法がわかりません。
これを解決する方法はありますか?

4

2 に答える 2

2

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

alias source=:
## The actual script source here...
unalias source
于 2013-02-01T14:17:22.553 に答える
1

sourceという関数を使用して、コマンドを再定義しsourceます。

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

source() { builtin source /dev/null; return 0; }
source() { read < /dev/null; return 0; }
source() { :; return 0; }
export -f source
于 2013-02-01T16:04:59.497 に答える