• hate #! shebang В большинстве юниксов, как и в GNU/Linux, при разборе имени шелла указанного в первой строке после "#!" выделяется имя программы и единственный аргумент.

    То есть "#!/some/prog -f" будет выполнено как программа "/some/prog" с аргументом "-f" и вторым аргументом "filename". Если же хочется написать что-то вроде "#!/some/prog -n -f", то в качестве первого аргумента будет передана строка "-n -f". То есть ключа "-f" в списке аргументов уже не будет. Конечно это было бы терпимо (благодаря гнутому соглашению, которое позволяет писать "-nf" вместо "-n -f"), только вот путь к программе может меняться. По этой причине для переносимости пишут "#!/usr/bin/env prog". Так вот в этом случае никакие ключи для prog указать уже невозможно.

    Это неудобство, по видимому, обходится только при помощи создания отдельного скрипта для запуска выбранного скрипта.

    Можно заметить, что это ограничение интересным образом обошли в guile. В язык добавили многострочные комментарии в формате "#! ... !#". И если первые три строки файла сформированы как

    #!/path/to/guile \
    -e main -s
    !#

    То при запуске программы с аргументами "\" и "filename" guile понимает, что выполняться будет filename, а дополнительные аргументы надо искать на второй строке.
    ♡ recommended by @anton0xf, @O01eg, @NokitaKaze

Replies (2)