#! (shebang) обмеження довжини лінії


3

У зв'язку з розвитком GNU Parallel, здається, я досяг межі довжини #! (шебанг). Ця лінія шебанг:

#!/bin/echo 123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789done bar

друкує це на Debian, Mandriva, SuSE, Ubuntu, Centos, RedHat:

123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k12345 ./shebang

Тож воно, здається, відсікається після 128 байт. Але це те, що я очікував (надрукувавши повний рядок) на FreeBSD, DragonFlyBSD та Hurd. На OpenBSD і Tru64 він нічого не друкує (?!).

Що обумовлює це обмеження? Чи можу я обійти це?

Фон

Параметр GNU Parallel -shebang дає можливість записати повну паралельну команду у рядок #! -. Тому дещо обмежує, якщо повна команда може становити лише 128 символів.

Решта файлу використовується як паралельний вхід, тому команда не може бути записана туди.


Саме для цього і є гередоки.
Ігнасіо Васкес-Абрамс

@ IgnacioVazquez-Abrams Чи існує конструкція heredoc, яка дозволить будь-який вхід (включаючи \ 0, \ n, рядок heredoc та будь-яку їх комбінацію)? Моє введення може бути двійковим файлом, тому це неприйнятне рішення, якщо певні рядки введення заборонені.
Оле Танге

1
Грн. Ні, але ви можете використовувати дозорну в кінці текстової частини та додавати двійкові дані згодом. Ця методика часто використовується монтажниками.
Ігнасіо Васкес-Абрамс

@ IgnacioVazquez-Abrams Який дозор може використовуватись, якщо користувач може використовувати дозорну інформацію як дані для свого використання? Здається, ви думаєте, що я контролюю дані: я ні. Вся суть GNU Parallel полягає в тому, щоб дозволити користувачеві контролювати дані і все ще "робити все правильно".
Оле Танге

Відповіді:


5

Межа довжини залежить від виконання. Нещодавно я дослідив подібне питання, і знайшов цей чудовий звіт Свена Машека про лінію shebang в різних версіях Unix та Linux. Ви обов'язково повинні поглянути. Там сказано, що, зокрема, лінія shebang спочатку була обмежена 16 байтами.


Смішно, я можу побачити у своєму браузері, що я відвідав цю сторінку раніше, але я чітко не прочитав розділ довжини.
Оле Танге

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.