Como devo permitir mais de um argumento para o interpretador em um shebang em um script

1

De resposta de Glenn :

Read your execve(2) man page. The limitation on a single optional argument is OS dependent. Linux treats all words after the interpreter as one single argument

If you want to do this:

#! /path/to/interpreter arg1 arg2 arg3

You should in fact do this

#!/bin/sh
exec /path/to/interpreter arg1 arg2 arg3 "$@"

Se eu quiser escrever um script que contenha algum código na linguagem de script,

#! /path/to/interpreter arg1 arg2 arg3

<script content in the script language>

de acordo com a resposta de Glenn, eu deveria escrever o script como:

#!/bin/sh
exec /path/to/interpreter arg1 arg2 arg3 "$@"

Então, onde devo escrever <script content in the script langauge> ? Como está escrito na linguagem de script, mas não na linguagem de shell, ele não pode ser colocado no shell script, correto? Onde devo colocá-lo?

Obrigado.

    
por Tim 07.04.2018 / 05:52

2 respostas

2

Você terá que induzir o intérprete a ignorar a linha exec e colocar o conteúdo do script normalmente no arquivo. As opções incluem:

por 07.04.2018 / 06:04
3

Além das opções que o muru deu, existe outra opção. Dependendo da complexidade e duração do script, você pode colocar o script dentro do script de shell (se é geralmente útil é outra pergunta!) Usando o mecanismo "here-document" , você pode ter o texto do pipe pipe embutido em outro programa, como este:

test.sh

#!/bin/sh
exec /usr/bin/python3 <<EOF
import datetime
print("The time is now "+str(datetime.datetime.now()))
EOF

Eu não usaria isso se o programa fosse muito grande, porque é mais difícil editar esses tipos de scripts; eles estão embutidos em outro idioma, então você tem que extrair o script para fazer qualquer modificação se quiser testá-los.

Como uma estranheza, observe que o shell ainda expande as variáveis do shell e interpreta caracteres especiais usando este método:

#!/bin/sh
exec /usr/bin/python3 <<EOF
print("The current user is $USER and date is $(date).")
EOF

Retorna The user is erik and date is Fri Apr 6 22:14:23 MDT 2018 .

    
por 07.04.2018 / 06:21