我有一個插件管理器,它的功能有點低效,我想讓它更有效率,但我找不到加載它們的好方法
目前它只是使函式source
成為函式體,如下所示:
__baz_load_functions() {
_func_dir="$plugin/$BAZP_SRC/functions"
if [ -d "$_func_dir" ]; then
for _baz_func in "$_func_dir"/*; do
[ ! -f "$_baz_func" ] && continue
_func_name="$(__baz_get_base "$_baz_func" | __baz_sanitize)"
[ ! "$_func_name" ] && continue
__baz_vecho "Loading function '$_func_name'"
eval "function $_func_name() { source '$_baz_func'; }"
done
fi
}
而且我嘗試cat在身體上使用它,它只是壞了,我真的想不出其他任何東西,也許有一個特殊的關鍵字或其他東西可以做到這一點?
提前致謝 :)
uj5u.com熱心網友回復:
您可以將檔案內容讀入一個變數,然后在eval.
這是未經測驗的,但我認為它應該可以作業:
__baz_load_functions() {
_func_dir="$plugin/$BAZP_SRC/functions"
if [ -d "$_func_dir" ]; then
for _baz_func in "$_func_dir"/*; do
[ ! -f "$_baz_func" ] && continue
_func_name="$(__baz_get_base "$_baz_func" | __baz_sanitize)"
[ ! "$_func_name" ] && continue
__baz_vecho "Loading function '$_func_name'"
_baz_func_body=$(< "$_baz_func")
eval "function $_func_name() {
$_baz_func_body
}"
done
fi
}
但是,您的方法有一個有趣的功能:您可以編輯目錄中的functions檔案,然后呼叫該函式將立即使用新版本,而不必重新加載它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/492950.html
