例如,我想编写一个bash shell脚本来使用rsync执行循环备份。我应该把它作为一个独立的脚本文件(backup.sh)还是包装在一个函数(backup)中?作为脚本文件,我可以只用bash backup.sh来运行它。作为一个函数,我可以将其放入foo.sh等文件中,并在每次登录时将其作为源文件,然后我可以简单地将backup作为命令运行来备份我的文件。问题是,这两种策略的优缺点是什么?
或者更一般地说,我在想,在什么情况下,我应该将功能实现为独立的Shell脚本文件或shell函数?
我的一些想法:我知道一些图形会话(如KDE、Gnome等)。登录时获取不同的文件。如果想要在图形化启动的应用程序中使用shell函数(例如单击图标打开emacs),可能会造成一些混乱。但我更喜欢将它们实现为shell函数,并将它们放在一起放入文件中,我认为这样做很整洁且组织良好。
还有其他的想法或建议吗?
发布于 2012-09-01 00:25:06
一个类似python的解决方案:
#!/bin/bash
caller_shlvl=$1
shift
backup () {
...
}
if (( $caller_shlvl < $SHLVL )); then
backup "$@"
fi您可以执行以下两项操作之一:
bash script.sh $SHLVL other args在调用脚本时运行备份,或者
source script.sh $SHLVL
# Time passes
backup firstarg secondarg etc它将在当前shell中定义函数,但不会执行它。
(必须将$SHLVL作为显式的第一个参数传递,这是我能做到的最接近于模拟Python的
if __name__=="__main__":它并不美观,并且可能使这个答案不是那么有用。)
https://stackoverflow.com/questions/12219001
复制相似问题