我使用以下方式在当前 Bash 会话中执行一组 Bash 脚本文件:
source ~/myScripts/{assignments.sh,nginx_conf.sh,php_conf.sh,drush_install.sh}
我觉得维护起来很不舒服。一些垂直收集更好。伪代码:
assignments.sh
nginx_conf.sh
php_conf.sh
drush_install.sh
你会如何垂直地做到这一点?
顺便说一下,我不确定像这样的源文档是最好的方法。
更新
我现在明白我的一行source
操作注定要失败,因为从 Bash 4.3.48(1) 开始,Bash 解释器source
以这样一种方式求值,它只能处理一个文件,而超出它的任何其他文件都将被求值作为第一个文件的参数(大括号集{}
对此无济于事)。
我的印象是这与 with bash
instead相同source
。
heredoc 将每个文件名放在自己的行上,没有任何其他内容(尽管假设文件名不包含像换行符这样疯狂的东西)并允许对文件名进行特定排序:
这也避免了
source file [arguments]
后续文件名将被视为参数的问题assignments.sh
(除非你确实意味着后续文件名是参数??)。该列表需要手动与文件系统上的内容保持同步。另一种选择是跳过单调乏味的文件列表并将它们放在一起;这假定目录中的所有匹配文件都可以而且应该作为来源(因此不要混入其他
*.sh
不得作为来源的随机文件)。然而,由于没有文件与 glob 匹配的边缘情况,这会变得复杂,在这种情况下bash
,默认情况下将传递 in 的文字文件名~/myScripts/*.sh
以获取来源,因此必须解决这个问题(如有必要,暂时)并且如果没有匹配项:使用这种方法,文件名需要以一种方式命名,如果存在文件需要来源的顺序,则 glob 将以正确的顺序匹配它们。(在 ZSH 中,不需要
shopt
调用,因为for f in ~/myScripts/*.sh(N); do
足以执行空 glob。其他 shell 在处理 glob 的方式以及没有匹配项时的处理方式方面会有所不同。)