$ cat test.c #include <unistd.h> int main(int argc, char **argv) { char *newargv[] = { "[", "1", "=", "1", "]", NULL}; char *newenviron[] = { NULL }; return execve("/usr/bin/[", newargv, newenviron); } $ gcc -Wall test.c -o test $ ./test [: extra argument `]' В Федоре не воспроизводится.
В Федоре /usr/bin/[ не симлин, в отличии от Альта: $ ls -l /usr/bin/[ /usr/bin/test -rwxr-xr-x 1 root root 33632 Feb 17 18:22 /usr/bin/[ -rwxr-xr-x 1 root root 30616 Feb 17 18:22 /usr/bin/test
В Федоре /usr/bin/[ не симлинк, в отличии от Альта: $ ls -l /usr/bin/[ /usr/bin/test -rwxr-xr-x 1 root root 33632 Feb 17 18:22 /usr/bin/[ -rwxr-xr-x 1 root root 30616 Feb 17 18:22 /usr/bin/test
Ясно как белый день. Мы, видимо, экономили место на диске.
http://git.altlinux.org/repo/39879/
Да, помогло.
На самом деле эта ошибка висела уже очень давно: https://bugzilla.altlinux.org/show_bug.cgi?id=10170 (просто там testcase делался под zsh, где command блокирует использование и встроенных команд).
coreutils-8.10-alt2 -> sisyphus: * Sun Mar 06 2011 Dmitry V. Levin <ldv@altlinux> 8.10-alt2 - Resurrected /usr/bin/dir, /usr/bin/vdir, and /usr/bin/[ executables instead of symlinks (closes: #25197).