取消我的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
但我发现它很难看。
答案 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) )。
我相信您可以找到适合您需求的主题变体。