2015-02-27 3 views
2

У меня есть скрипт bash, который я не хочу читать профиль bashrc или bash. поэтому я попытался это:bash с несколькими длинными опциями

#!/bin/bash --norc --noprofile 
echo ran 

это дает мне эту ошибку:

> ./tst.sh 
/bin/bash: --norc --noprofile: invalid option 
Usage: /bin/bash [GNU long option] [option] ... 
GNU long options: 
    --debug 
    --debugger 
    --dump-po-strings 
    --dump-strings 
    --help 
    --init-file 
    --login 
    --noediting 
    --noprofile 
    --norc 
    --posix 
    --protected 
    --rcfile 
    --rpm-requires 
    --restricted 
    --verbose 
    --version 
    --wordexp 

кажется, что я могу указать только один длинный вариант, но я не могу найти, что документально. --noprofile, вероятно, над убить, но я до сих пор интересно, почему я не могу указать несколько длинных опций

+0

http://www.in-ulm.de/~mascheck/various/shebang/#splitting –

+0

Shebang задокументирован в 'execve (2)'. Страница руководства Ubuntu execve находится здесь: http://manpages.ubuntu.com/manpages/trusty/en/man2/execve.2.html –

+0

Я ничего не видел ни в одном из них, который объяснял, почему второй аргумент был вопрос. Я вижу, что строки слишком длинны, но в этом случае это не проблема. – kdubs

ответ

2

Дело в том, что вы можете указать на наиболее один слово опций на притон линии (он не имеет ничего общего с длинными или короткими вариантами).

Точнее, execve функция вашей ОС проходит все, что следует #!/bin/bash, как один аргумент колотить. Это приводит к тому же, что и к исполнению

bash "--norc --noprofile" 

, который производит вашу ошибку.

Как отметил ссылки в комментариях (in-ulm.de/~mascheck/various/shebang/#splitting и manpages.ubuntu.com/manpages/trusty/en/man2/execve.2.html) такое поведение ОС-специфические, и варианты включают:

  • Все слова в качестве единственного аргумента (ваш случай)
  • Каждый слово как отдельный аргумент (то, что вы ожидали)
  • Только первое слово в качестве единственного аргумента
  • нет аргументов на всех

Заключение: на вашей ОС вы не можете указать несколько слов аргументов для bash на линии shebang, и даже если бы вы могли, вы, вероятно, не должны этого делать, потому что сценарий не работает в операционных системах, которые не поддержка нескольких аргументов shebang.