Я заметил, что оболочка Bourne в Solaris 10 /bin/sh
(а также /sbin/sh
) разветвляется при использовании косвенного обращения (<
).Я пробовал кучу других оболочек Борна, в том числе:
- Оболочка POSIX
/usr/xpg4/bin/sh
на Solaris 10 /bin/bash
, /bin/ksh
на Solaris 10 /bin/sh
в AIX 5 /bin/sh
в Debian Linux 5
, и ни один из них не демонстрирует такого поведения.
Я пораженЯ не был укушен этим раньше.Например, в оболочках saner (т. Е. Во всех перечисленных выше) следующий скрипт выводит «1»:
$ cat foo
#!/bin/sh
x=0
while read y ; do
x=1
done </etc/passwd
echo $x
$ ./foo
0
$
Solaris 10 /bin/sh
возвращает 0, потому что назначение x=1
происходит в подоболочке, вызваннойкосвенность: при выходе из подоболочки это назначение теряется.(Если я удаляю </etc/passwd
и читаю из stdin
, вместо этого выводится «1», как и ожидалось).
Есть ли какая-то давняя причина, по которой «традиционный» Solaris sh
обладает этим свойством?Или это ошибка?