2013-02-01 55 views
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 

的想法工作正常,但在这一点上,我不知道如何避免上述命令的执行。
不知道如何解决这个问题?

+0

请记住,'source'是shell内建的,不像大多数其他命令。然而,有趣的问题。 –

+0

我的评论可能很愚蠢,但既然你可以改变脚本,为什么不直接评论这些命令并保存?或者这些命令来自用户输入?你可以通过正则表达式来检查它们。或者我不明白你的要求? – Kent

+0

@Kent矿只是一个简单的例子。我需要的是在某些可能发生或不可能发生的情况下阻止某个命令的执行。 –

回答

2

一种解决方法是定义该命令的别名,该命令什么都不做,并在脚本完成后取消定义它。别名必须脚本本身对于这项工作中声明:

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

你不需要任何命令,返回就够了。 'source(){return 1; }'可能是最好的,表示命令没有成功运行。 –

相关问题