5

我必须避免在 bash 脚本中执行某个命令。
我想使用 preexec 陷阱来做到这一点。

假设我想避免命令'source'只是为了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

这个想法很好用,但此时我不知道如何避免执行所述命令。
知道如何解决这个问题吗?

4

2 回答 2

2

一种解决方法是为该命令定义一个不执行任何操作的别名,并在脚本完成后取消定义它。必须在脚本本身中声明别名才能使其工作:

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 回答