use*_*394 32 bash ubuntu linux-mint
我正在使用FPM工具来创建.deb包.此工具在从支持的文件中删除包之前/之后创建.
不幸的是,FPM生成的bash脚本包含这样的功能
dummy() {
}
Run Code Online (Sandbox Code Playgroud)
这个脚本退出时出错:
语法错误:"}"意外
BASH不允许空函数吗?哪个版本的bash/linux有此限制?
ore*_*iss 42
您可以使用: 它相当于true并且主要用作无操作符...
dummy(){
:
}
Run Code Online (Sandbox Code Playgroud)
小智 8
空的bash函数可能是非法的.函数只包含注释也会被认为是空的.
一个":"(空命令)可以放在函数中,如果你想"做什么"
请参阅:http://tldp.org/LDP/abs/html/functions.html
我推荐这个:
dummy(){ unused(){ :;} }
如果您使用:null 命令,它将通过 xtrace 选项打印:
(
set -o xtrace
dummy(){ :; }
dummy "null command"
)
echo ------
(
set -o xtrace
dummy(){ unused(){ :;} }
dummy "unused function"
)
Run Code Online (Sandbox Code Playgroud)
输出:
+ dummy 'null command'
+ :
------
+ dummy 'unused function'
Run Code Online (Sandbox Code Playgroud)
对于调试,我使用这样的包装器:
main() {(
pwd # doing something in subshell
)}
print_and_run() {
clear
(
eval "$1() { unused() { :; } }"
set -o xtrace
"$@"
)
time "$@"
}
print_and_run main aaa "bb bb" ccc "ddd"
# output:
# + main aaa 'bb bb' ccc ddd
# ..
Run Code Online (Sandbox Code Playgroud)