Dash 执行重定向错误

Dash 执行重定向错误

这:

set -x
rm -f p; mkfifo p
exec 99<>p

在 bash 中成功,但"99 not found"在 dash 中失败 ( )。

我如何让它在破折号中工作?

答案1

源自 Bourne Shell 的 POSIX 标准及其后代 ksh88 明确提到这是不允许工作的。原因是 shell 语法:

<>file

打开标准输入以进行读取和写入,并且:

[n]<>file

打开文件描述符n以进行读取和写入。

n在本例中是一个数字。

您使用了数字 99,这是一个超出 POSIX 指定范围的两位数字。因此解析器没有将其视为与重定向运算符相关的数字,而是将其视为单独的参数。所以这个参数被视为要执行的文件exec

如果您喜欢可移植脚本,请遵循 POSIX 标准;如果您喜欢编写完全可移植的脚本,请使脚本 100% Bourne Shell 兼容。

由于在您的情况下似乎没有理由使用 99,因此我建议使用 9。

相关内容