我有这个:
foo(){
install_ores_gitflow;
command foo "$@"
}
export -f foo;
我正在寻找这样的东西:
export foo(){
install_ores_gitflow;
command foo "$@"
}
但该语法不正确。
我发现的一项技术是这样的: 如何在一行中导出一个文件中的所有 Bash 函数?
这意味着我可以这样做:
set -a;
foo(){
install_ores_gitflow;
command foo "$@"
}
set +a;
但我不喜欢这个解决方案,因为采购脚本可能有set -a
这意味着我的脚本将覆盖非常糟糕的脚本。
答案1
这是一个令人讨厌的黑客,但至少它允许你把export
命令多于更容易看到的函数定义。
# a function to create a dummy function and export it
export_function() { eval "function $1 { :; }; export -f $1"; }
# then
export_function foo
foo() { echo "here is the *real* function"; }
答案2
为什么不使用-a
eg 检查选项的状态echo $-
,这样如果设置了就不需要执行任何操作?
答案3
好吧,我认为这是一种明智且可靠的方法:
#!/usr/bin/env bash
if [[ ! "$SHELLOPTS" =~ "allexport" ]]; then
set -a;
all_export=nope;
fi
ores_git_merge_with_integration(){
install_ores_gitflow;
command "$FUNCNAME" "$@"
}
ores_git_tools(){
install_ores_gitflow;
command "$FUNCNAME" "$@"
}
if [ "$all_export" == "nope" ]; then
set +a;
fi
在您的 bash 脚本中,可能可以将所有要导出的函数分组并用 set -a / set + 命令包围它们。
检查环境变量的目的$SHELLOPTS
是查看 set -a 是否未打开,如果未打开,则需要在完成后将其关闭。