Bash 如何编写代码来添加和删除脚本中的函数?

Bash 如何编写代码来添加和删除脚本中的函数?,bash,shell,scripting,Bash,Shell,Scripting,我正在为用户提供向现有bashshell脚本添加附加函数的机会 名为.profile_app的现有脚本如下所示: 用户可以使用以下脚本扩展上述脚本。 运行此脚本后,.profile_应用程序将如下所示。 添加一个新函数完全没有问题。但是如何从该文件中删除函数?例如,最后添加的两个功能测试启动和测试停止?它的代码是什么样子的 补遗 我想我不能正确地描述我的问题。在这种情况下,语法是不相关的。上面的脚本只是我实际代码中的简化示例。它们真的很管用。我的问题是,如果用户能够从概要文件中删除函数(而不是添

我正在为用户提供向现有bashshell脚本添加附加函数的机会

名为.profile_app的现有脚本如下所示: 用户可以使用以下脚本扩展上述脚本。 运行此脚本后,.profile_应用程序将如下所示。 添加一个新函数完全没有问题。但是如何从该文件中删除函数?例如,最后添加的两个功能测试启动和测试停止?它的代码是什么样子的

补遗 我想我不能正确地描述我的问题。在这种情况下,语法是不相关的。上面的脚本只是我实际代码中的简化示例。它们真的很管用。我的问题是,如果用户能够从概要文件中删除函数(而不是添加函数),那么脚本应该是什么样的。例如,用户输入希望再次删除test_start和test_Stop功能


如何使用脚本实现这一点?

我建议使用以下解决方案,其中包括文件夹中的文件,每个函数一个文件。要取消/激活它们,只需将相应的文件放入该文件夹,或将其删除

.profile_应用程序

/路径/到/配置文件/包括/开始

/路径/到/配置文件/包括/停止

PS:
bash
允许使用
函数
关键字,但POSIX不允许使用它,并且没有真正的函数。我建议简单地使用:

stop_app() {
    /path/to/home/run.sh stop
}

与您的问题没有直接关系,但请注意,
function funcname(){
合并了两种不同的语法形式,即旧版ksh
function funcname{
和POSIX
funcname(){
,其方式与旧版ksh或POSIX sh都不兼容(因此与ash/dash/posh/etc完全不兼容)请参阅,并考虑在不偏离标准的情况下,只需继续使用POSIX语法。我不建议尝试将文件添加/删除功能。在目录中,您的代码只是将新的条目添加到该目录中作为单独的FIL更为简洁。es(并且在运行时,每个文件都会获得源代码)--然后,当您想要删除或替换某个文件时,您只需将单个文件作为一个整体删除或替换;与尝试编写内容感知编辑脚本相比,错误发生率要低得多。在单行函数形式中,结束
}
需要一个分号:
start\u app(){home/run.sh start;}
--请参见手册中的
  read -p "Name of App" n1
  read -p "How to start" n2
  read -p "How to stop:" n3
            
  echo " function ${n1}_start() { $n2 }" >> /home/.profile_app
  echo " function ${n1}_stop() { $n3 }" >> /home/.profile_app

    
function start_app() { home/run.sh start }
function stop_app() { home/run.sh stop }
    
function test_start() { /etc/init.d/test start }
function test_stop() { /etc/init.d/test stop}
read -p "Name of App to be deleted" n1


delete "function test_start() { .... }" from .profile_app ???
delete "function test_stop() { .... }" from .profile_app ???
for file in /path/to/profile/includes/* ; do
    source "${file}"
done
function start_app() {
    /path/to/home/run.sh start
}
function stop_app() {
    /path/to/home/run.sh stop
}
stop_app() {
    /path/to/home/run.sh stop
}