Bash 是否可以避免执行某个命令?

Bash 是否可以避免执行某个命令?,bash,Bash,我必须避免在bash脚本中执行特定命令。 我想用preexec陷阱来实现这一点 假设我只想为axample避免使用命令“source”。 我所做的基本上是: #!/bin/bash function preexec () { if test $( echo "$BASH_COMMAND" | cut -d " " -f1 ) == "source" then echo ">>> do not execute this"

我必须避免在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
这个想法很好,但在这一点上,我不知道如何避免执行上述命令。

有没有办法解决这个问题?

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

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

使用名为
source
的函数重新定义
source
命令

可以导出函数

source() { builtin source /dev/null; return 0; }
source() { read < /dev/null; return 0; }
source() { :; return 0; }
export -f source
source(){内置源代码/dev/null;返回0;}
source(){read
请记住,
源代码
是一个shell内置命令,与大多数其他命令不同。有趣的问题是,我的评论可能很愚蠢,但是既然你可以修改脚本,为什么不把那些命令注释掉并保存呢?或者命令来自用户输入?你可以用正则表达式检查它们。或者我不明白你的要求?@Kent mine只是一个简单的例子。我需要的是防止在某些情况下执行某个命令,这些情况可能会发生,也可能不会发生。您不需要任何命令,返回就足够了
source(){return 1;}
发出命令未成功运行的信号可能是最好的。