use*_*970 3 executable shell-script wildcards subshell syntax
我使用 Ubuntu 16.04 并且我有一个本地化文件,一个执行许多文件的文件,这是我将自己的 GitHub 项目下载到我的机器后得到的。
该文件包含一个 Bash 脚本,名为localize.sh
. 我通过~/${repo}/localize.sh
.
该文件包含许多行,所有行都具有相同的基本模式(见下文),以在子会话中执行所有相关文件。
这是该文件的实际内容:
#!/bin/bash
~/${repo}/apt/security.sh
~/${repo}/apt/lemp.sh
~/${repo}/apt/certbot.sh
~/${repo}/apt/misc.sh
~/${repo}/third-party/pma.sh
~/${repo}/third-party/wp-cli.sh
~/${repo}/conf/nginx.sh
~/${repo}/conf/php.sh
~/${repo}/conf/crontab.sh
~/${repo}/local/tdm.sh
Run Code Online (Sandbox Code Playgroud)
人们可以注意到重复的~/${repo}/
模式。
这不是一个大问题,但减少这些冗余字符仍然会很好,因为这个文件应该变得更大。
实现 DRY 的最简单方法是什么(不要重复该代码的自己版本?
在这种情况下,我个人不想使用一条长线。
编辑:原则上,列出的目录中没有也不应该有任何其他文件,除了localize.sh
.
此外,可能 namelocalize.sh
以及调用文件的操作localization
是一种不好的方法;如果你认为它不好,请在旁注中批评我。
不清楚您是否正在运行相关目录中的所有脚本,但如果是,您可能会发现run-parts
有用:
for subdir in apt third-party conf local
do
run-parts --regex '\.sh$' ~/${repo}/${subdir}
done
Run Code Online (Sandbox Code Playgroud)
请注意,这将在每个目录中按字母数字顺序运行脚本,因此如果子目录中的顺序很重要,您需要重命名它们(或编号)。您可以run-parts
通过使用以下--test
选项运行它来提前查看将执行的操作:
apt/certbot.sh
apt/lemp.sh
apt/misc.sh
apt/security.sh
third-party/pma.sh
third-party/wp-cli.sh
conf/crontab.sh
conf/nginx.sh
conf/php.sh
local/tdm.sh
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
186 次 |
最近记录: |