Почему uname -M возвращает пустую строку?

На той же машине (AIX 6.1), в двух разных оболочках входа (оба ksh), с разными идентификаторами пользователей, я могу сделать uname -M ; в одной оболочке я получаю модель системы. В другой оболочке я получаю BLANK! Единственное отличие – это идентификатор пользователя и, следовательно, среда. Я не могу поставить здесь окружающую среду.

Пример Пользователь 1 Оболочка:

 $ uname -M IBM,1234-567 $ 

Пример User 2 Shell:

 $ uname -M $ 

Я сделал ферму в обеих оболочках. Есть разница, но я этого не понимаю. Вот плохая ферма:

 truss uname -M .. a bunch of execve's ripped out as it was searching the PATH for uname. execve("/bin/uname", 0x2FF2155C, 0x20012EF8) argc: 2 __loadx(0x03480000, 0x2FF21380, 0x00000108, 0xF0713968, 0x20000CD0) = 0x00000000 __loadx(0x0A040000, 0xD042D064, 0x0000008A, 0x20001254, 0x00000000) = 0x00000000 sbrk(0x00000000) = 0x200013D0 vmgetinfo(0x2FF20530, 7, 16) = 0 sbrk(0x00000000) = 0x200013D0 __libc_sbrk(0x00000000) = 0x200013D0 getuidx(4) = 28633 getuidx(2) = 28633 getuidx(1) = 28633 getgidx(4) = 100 getgidx(2) = 100 getgidx(1) = 100 getuidx(4) = 28633 getuidx(2) = 28633 getuidx(1) = 28633 getgidx(4) = 100 getgidx(2) = 100 getgidx(1) = 100 __loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128 __loadx(0x01480180, 0x2FF1FEF0, 0x00000A50, 0xF068921C, 0xF068914C) = 0xF0759FA0 __loadx(0x07080000, 0xF06891EC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF3C __loadx(0x07080000, 0xF068912C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF48 __loadx(0x07080000, 0xF06891FC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF78 __loadx(0x07080000, 0xF068913C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF84 __loadx(0x07080000, 0xF06891BC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF54 __loadx(0x07080000, 0xF068915C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF6C __loadx(0x07080000, 0xF06891CC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF90 __loadx(0x07080000, 0xF06891DC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AFC0 __loadx(0x07080000, 0xF068916C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AFA8 __loadx(0x07080000, 0xF068917C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075B020 getuidx(4) = 28633 getuidx(2) = 28633 getuidx(1) = 28633 getgidx(4) = 100 getgidx(2) = 100 getgidx(1) = 100 __loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128 getuidx(4) = 28633 getuidx(2) = 28633 getuidx(1) = 28633 getgidx(4) = 100 getgidx(2) = 100 getgidx(1) = 100 __loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128 getuidx(4) = 28633 getuidx(2) = 28633 getuidx(1) = 28633 getgidx(4) = 100 getgidx(2) = 100 getgidx(1) = 100 __loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128 getuidx(4) = 28633 getuidx(2) = 28633 getuidx(1) = 28633 getgidx(4) = 100 getgidx(2) = 100 getgidx(1) = 100 __loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128 access("/usr/lib/nls/msg/en_US/uname.cat", 0) = 0 _getpid() = 7405946 uname(0x2000132C) = 0 statx("CuAt", 0x2FF20870, 76, 0) Err#2 ENOENT kopen("CuAt", O_RDONLY) Err#2 ENOENT kioctl(1, 22528, 0x00000000, 0x00000000) = 0 kwrite(1, "\n", 1) = 1 __loadx(0x04000000, 0x2FF20970, 0x00000800, 0x0000D032, 0x00000000) = 0x00000000 kfcntl(1, F_GETFL, 0x00000001) = 67110914 kfcntl(2, F_GETFL, 0x2FF22FFC) = 67110914 _exit(0) 

Вы можете видеть, что kwrite в конце только печатает символ новой строки, "\n" .

В хорошем выводе фермы, похоже, что uname получает атрибут:

 /etc/objrepos/CuAt 

Это привело меня к команде lsattr и к другим .

Почему uname -M пусто? Какие переменные среды повлияют на это?

Я понял. Я просматривал «хорошую» среду и видел этот env var:

export ODMDIR=/etc/objrepos

Зная, что «хорошая ферма» здесь просматривает номер модели машины, я запустил эту команду в плохую оболочку и теперь uname -M работает:

 $ uname -M IBM,1234-567 

Извините, я не публиковал среду, но она огромная и содержит много конфиденциальной информации.