dubr
@dubr
пыхарь

Почему в выводе shell_exec('man whoami') дублируются буквы на os x?

Привет! Случайно заметил вот такую странность, жить не мешает, но хочется понять природу явления на всякий случай.

На макбуке стоит php 5.6 / nginx / php-fmp. Создаем файлик:

<?php
echo "<pre>";
echo phpversion();
echo shell_exec('man whoami');


И получаем вот такой вывод:

5.6.24
WHOAMI(1) BSD General Commands Manual WHOAMI(1)

NNAAMMEE
wwhhooaammii -- display effective user id

SSYYNNOOPPSSIISS
wwhhooaammii

DDEESSCCRRIIPPTTIIOONN
The wwhhooaammii utility has been obsoleted by the id(1) utility, and is equiv-
alent to ``iidd --uunn''. The command ``iidd --pp'' is suggested for normal
interactive use.

The wwhhooaammii utility displays your effective user ID as a name.

EEXXIITT SSTTAATTUUSS
The wwhhooaammii utility exits 0 on success, and >0 if an error occurs.

SSEEEE AALLSSOO
id(1)

BSD June 6, 1993 BSD


Дублируются буквы в заголовках и в названии команды в тексте. Если набрать 'man whoami' в консоли, все норм. Указывать полный путь до man пробовал, результат аналогичный.

Более того, если выполнить тот же код в консольном php через терминал:

php -r 'echo phpversion(); echo shell_exec("man whoami");'


Вывод будет нормальный:

5.6.24
WHOAMI(1) BSD General Commands Manual WHOAMI(1)

NAME
whoami -- display effective user id

SYNOPSIS
whoami

DESCRIPTION
The whoami utility has been obsoleted by the id(1) utility, and is equiv-
alent to ``id -un''. The command ``id -p'' is suggested for normal
interactive use.

The whoami utility displays your effective user ID as a name.

EXIT STATUS
The whoami utility exits 0 on success, and >0 if an error occurs.

SEE ALSO
id(1)

BSD June 6, 1993 BSD


Попробовал воспроизвести на сервере с Debian, не воспроизводится. В чем может быть проблема, кто сталкивался, что ковырять?
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если посмотрите исходный текст (/usr/share/man/man1/...), то увидите, что между дублирующимися символами стоит код BS (\x08). Это пошло ещё от принтеров, когда жирный символ можно было получить вернувшись на один символ назад (BackSpace) и повторно его напечатав.
В консоли разные программы по разному обрабатывают этот символ, отсюда и такая разница в выводе.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы