我编写此此处文档是为了在该路径下获取一些脚本,~/own_scripts/
但我编写它的方式会导致该路径重复:
source <<-EOF
~/own_scripts/1.sh
~/own_scripts/2.sh
# More scripts under ~/own_scripts;
EOF
使用路径设置变量并随后取消设置变量固然很好,但仍会导致冗余。
避免此类source
(或bash
)此处文档中的路径冗余的最佳方法是什么?
答案1
这里的文档只是一个文档。此处文档中的脚本只是一个脚本。
你的脚本可以写成
cd "$HOME/own_scripts" || exit 1
./1.sh
./2.sh
或者,如果您要调用的所有脚本的调用n.sh
范围n
为 1 到 30:
cd "$HOME/own_scripts" || exit 1
for (( i = 1; i <= 30; ++i )); do
[ -x "${i}.sh" ] && ./${i}.sh
done
那是,
source <<-'END_SCRIPT'
cd "$HOME/own_scripts" || exit 1
for (( i = 1; i <= 30; ++i )); do
[ -x "${i}.sh" ] && ./${i}.sh
done
END_SCRIPT
事实上,由于此处的文档现在很短,您可以再次删除cd
:
source <<-'END_SCRIPT'
for (( i = 1; i <= 30; ++i )); do
[ -x "$HOME/own_scripts/${i}.sh" ] && "$HOME/own_scripts/${i}.sh"
done
END_SCRIPT
只是,source
不从标准输入读取......所以采购此处文档将无法开始。
相反,使用类似的东西
bash <<-'END_SCRIPT'
...as above...
END_SCRIPT
(如果bash
是您要运行脚本的 shell)。
我习惯于
'END_SCRIPT'
启动此处文档。引用会阻止当前 shell 扩展文档中的变量,而更详细的标记将作为读者的文档。我用过
$HOME
而不是~
自从波浪线以来行为不像变量更详细的内容$HOME
更适合作为脚本中的文档。此处文档中的脚本仅用于
cd
将目录更改为该$HOME/onw_script
目录。如果失败,shell 会话将终止。在带有 -loop 的示例中
for
(将在 shell 中工作bash
)ksh
,我生成要在循环中执行的脚本的名称。在尝试执行它之前(使用-x
测试),我还测试是否确实存在具有该名称的可执行文件。