Рейтинг:2

Почему «меньше» принимает пустое имя файла и показывает некоторые переменные среды?

флаг cn

я побежал меньше команда, которую я ожидал сбой, потому что имя файла будет пустым, но, к моему удивлению, она напечатала некоторые переменные среды:

$less -XE "$(который несуществующий скрипт)"
экспорт LESSOPEN="| /usr/bin/lesspipe %s";
экспорт LESSCLOSE="/usr/bin/lesspipe %s %s";

(-ХЕ в основном заставляет его вести себя как кот.)

кот, с другой стороны, терпит неудачу:

$ cat "$(какой-то несуществующий-скрипт)"
cat: '': Нет такого файла или каталога

Почему меньше сделай это? Я могу только представить, что это проблематично, потому что если в вашем коде есть какая-то ошибка, которая приводит к пустому имени файла, вы получите фиктивный вывод.

Пока мы здесь, почему он печатает эти переменные среды? Они из моего окружения? Они идентичны:

$ объявлять -p МЕНЬШЕ ОТКРЫТЬ МЕНЬШЕ ЗАКРЫТЬ 
объявить -x LESSOPEN="| /usr/bin/lesspipe %s"
объявить -x LESSCLOSE="/usr/bin/lesspipe %s %s"

Я проверил человек меньше но имя файла параметр явно не задокументирован. Другие упоминания об этом, похоже, не были связаны с этим поведением. Я также проверил меньше Вопросы-Ответы.

флаг hr
Похоже, что выполнение `lesspipe` с пустым именем файла является особым использованием, предназначенным для выполнения из сценария установки оболочки, чтобы установить среду для последующих вызовов `less`. См., например, [Можете ли вы объяснить выражение eval в стандартном .bashrc] (https://askubuntu.com/questions/724351/can-you-explain-eval-expression-in-the-default-bashrc). Я не знаю, где это задокументировано.
wjandrea avatar
флаг cn
@steeldriver Да, ты прав! Я только что попробовал `less --no-lessopen ''`, и он потерпел неудачу с `: Нет такого файла или каталога`. Итак, если я правильно понимаю, это особенность установки Ubuntu? (и, может быть, установка Debian основной ветки тоже?)
user10489 avatar
флаг in
Ну, по крайней мере, это причуда lesspipe, и на справочной странице lesspipe написано, что он был написан для Debian.
wjandrea avatar
флаг cn
@steeldriver Похоже, что основная проблема заключается в том, что `less` неправильно заключает в кавычки строку, которую он передает в `LESSOPEN`, вместо этого все, что он делает, это ["Вставьте обратную косую черту перед каждым метасимволом"] (https://github.com /gwsw/less/blob/1d0e8245cd32b149101039adfc0a379daf778de1/имя_файла.c#L138-L143). Я бы предпочел, чтобы он вообще не пытался цитировать его, тогда мы бы цитировали имя файла в конфиге: `LESSOPEN='| /usr/bin/lesspipe "%s"'`.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.