通过取消设置禁用功能

时间:2014-06-05 10:09:34

标签: linux bash shell ksh

取消我的bash脚本我有很多次函数FuncGenrator。为了禁用/删除该功能,我执行以下操作:

unset  FuncGenrator

unset命令禁用了我脚本中的所有功能。 主要问题是当脚本运行时,每个函数都会返回命令未找到错误。例如,脚本unset_test.bash

#!/bin/bash

FuncGenrator () {
    echo " I AM REAL FUNCTION BUT NEED TO UNSET LATTER "
}


FuncGenrator
unset FuncGenrator
# run again the function  
FuncGenrator

当我运行这个脚本时,我得到输出:

I AM REAL FUNCTION BUT NEED TO UNSET LATTER 
./unset_test.bash: line 23: FuncTest: command not found

是否可以添加智能方法来阻止/禁用命令未找到的消息,或者可以将函数FuncGenrator设置为不执行任何操作?

到目前为止,我的解决方案是按以下方式附加2>/dev/null

FuncGenrator 2>/dev/null

但我发现它很难看。

3 个答案:

答案 0 :(得分:1)

而不是取消设置功能;使用do nothing命令重置它:

function FuncGenrator { :; }

或者

FuncGenrator() { :; }

答案 1 :(得分:0)

您可以添加测试:

test -v FunctionGenerator,其中-v开关检查变量是否已设置。另一种语法是[-v FunctionGenerator]。

示例可能是:

.
.
.
unset FunctionGenerator
if [ -v FunctionGenerator ]; then
    Do something
else
    Do something else
fi

答案 2 :(得分:0)

另一种方法是考虑一个标志,当设置时,它将立即退出该功能。例如:

#!/bin/bash

dont_execute_function=0

FuncGenrator() {
    ((dont_execute_function)) && return
    echo "I AM REAL FUNCTION BUT NEED TO BE UNSET LATTER"
}

FuncGenrator
dont_execute_function=1
FuncGenrator

另一种方法如下:

#!/bin/bash

FuncGenrator() {
    echo "I AM REAL FUNCTION BUT NEED TO BE UNSET LATTER"
}
FuncGenrator=FuncGenrator

$FuncGenrator
FuncGenrator=:
$FuncGenrator

这里的技巧是不直接调用你的函数,而是通过一个变量来调用它,该变量可以是函数的名称,也可以是内置的:(它是一个什么也不做的内置函数,总是返回true) )。

我相信您可以找到适合您需求的主题变体。