我必须避免在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
这个想法很好,但此时我不知道如何避免执行所述命令 知道如何解决这个问题吗?
答案 0 :(得分:2)
一种解决方法是为该命令定义一个别名,该命令不执行任何操作,并在脚本完成后取消定义。必须在脚本本身内声明别名才能使其工作:
alias source=:
## The actual script source here...
unalias source
答案 1 :(得分:1)
使用名为source
的函数重新定义source
命令。
可以导出功能。
source() { builtin source /dev/null; return 0; }
source() { read < /dev/null; return 0; }
source() { :; return 0; }
export -f source