如何使用此处文档中的一个路径

如何使用此处文档中的一个路径

我编写此此处文档是为了在该路径下获取一些脚本,~/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 中工作bashksh,我生成要在循环中执行的脚本的名称。在尝试执行它之前(使用-x测试),我还测试是否确实存在具有该名称的可执行文件。

相关内容