如何获取来源`.文件名`可靠吗?

如何获取来源`.文件名`可靠吗?

当前的 POSIX 规范没有为 dot.内置指定任何选项。

如果我做类似的事情:

$ echo 'echo .' > /tmp/-foo
$ PATH=/tmp "$shell" -c '. -foo'

那么不同 shell 的结果是不同的:

  • dash, ash, ksh88, Bourne shell、schily sh、schily osh、heirloom sh 效果很好。
  • bashyashksh93pdkshmkshposh不。更改命令以. -- -foo在这些 shell 中运行。

而且,使用--是一种不合规的方式,因为POSIX 规范说内置的不符合实用程序语法指南会忽略--

zsh是唯一适用于这两种情况的 shell。

那么如何才能. filename在类似 Bourne 或 POSIX 的 shell 中可靠地工作呢?

答案1

为了避免与 shell 相关的影响,请将完整路径传递给... /absolute/path/to/script. relative/path/to/script在所有 shell 中工作。

无论如何,路径查找对于源脚本来说很少有用。如果您确实需要 PATH 查找,那么您可以手动进行查找,以防文件名以-.或者您可以要求文件名不以 , 开头-,以保持简单。

答案2

我认为这部分是一个理论问题。

实际上,我可以通过避免-作为所包含脚本的第一个字符或通过提供脚本路径(相对或绝对并不重要)来使其可靠地工作。

再次从实际的角度来看,我更喜欢为已知的 shell 编写代码,但如果不可能的话,我可能会得到一个case包含在函数内的丑陋的语句。除非泛化*csh也必须扩展到 shell,在这种情况下我可能会逃跑。

相关内容