【发布时间】:2020-11-24 17:32:55
【问题描述】:
我正在为用户提供向现有 bash shell 脚本添加附加功能的机会。
名为 .profile_app 的现有脚本如下所示:
function start_app() {home/run.sh start}
function stop_app() {/home/run.sh stop}
用户可以用下面的脚本扩展上面的脚本。
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
运行此脚本后,.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}
添加新功能一点问题都没有。但是我怎样才能从这个文件中删除一个函数呢?例如。最后添加了 2 个函数 test_start 和 test_stop?它的代码是什么样的?
附录
我想我无法正确描述我的问题。在这种情况下,语法无关紧要。以上脚本只是我实际代码中的简化示例。他们真的很管用。我的问题是,如果用户应该能够从配置文件中删除一个函数(而不是添加它),那么脚本应该是什么样的。例如,用户输入他想再次删除 test_start 和 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 ???
如何使用脚本做到这一点?
【问题讨论】:
-
与您的问题没有直接关系,但请注意
function funcname() {合并了两种不同的语法形式,即旧版 kshfunction funcname {和 POSIXfuncname() {,其方式与 旧版 ksh 或 POSIX sh(因此与 ash/dash/posh/etc 无缘无故地不兼容)。请参阅wiki.bash-hackers.org/scripting/obsolete——当偏离标准没有任何特定优势时,请考虑继续使用 POSIX 语法。 -
也就是说,我不建议尝试将脚本添加/删除函数。拥有一个 directory 会更加明智,您的代码只是将新条目作为单独的文件添加到该目录(并且在运行时,每个文件都会被获取)——然后当您想要删除或替换某些内容时,您只需删除或替换整个单个文件;比尝试编写内容感知编辑脚本更不容易出错。
-
单行函数形式;结束
}需要分号:start_app() { home/run.sh start; }-- 参见手册中的3.2.4.3 Grouping Commands