2017-07-21 4 views
5

Est-il savoir que la plupart shebang implémentations soutiendront un seul paramètre, donc si vous avez quelque chose commeComment tromper shebang pour autoriser plusieurs paramètres?

#!/usr/bin/env some-tool-accepting-yaml param1 param2 
... (yaml body) 

Il va maintenant fonctionner comme prévu, car il appellera l'outil avec l'argument « param1 param2 » au lieu de le diviser en deux arguments.

Il semble que l'on workaround pratique est d'utiliser quelque chose comme:

#!/bin/sh 
arbitrary_long_name==0 "exec" "/usr/bin/gawk" "--re-interval" "-f" "$0" "[email protected]" 

Maintenant, cette approche rendrait le script basé sur YAML invalide en raison de la 2ème ligne, de sorte que la seule solution acceptable serait celui qui est aussi un commentaire, en commençant par "#" aussi.

Y at-il un moyen de contourner ce problème aussi?

+1

qui est l'exécutable pour lancer est-il 'python'? parce qu'il y a aussi cette question connexe: https://stackoverflow.com/questions/17458528/why-does-this-snippet-with-a-shebang-bin-sh-and-exec-python-inside-4-single-q –

+0

La solution de contournement que vous citez est awk, pas python. – rici

+2

Êtes-vous intéressé par une solution de contournement pour YAML, ou une solution générale? Dans le premier cas, dites-nous quel exécutable devrait consommer le contenu du fichier. – randomir

Répondre

3

Une solution générale sans utiliser des scripts polyglottes

de launcher.sh

#!/bin/bash 

# first argument to be split 
if [[ $- != *f* ]]; then reset=1; fi 
set -f 
arg=($1) 
shift 
if [[ $reset = 1 ]]; then set +f; fi 

# other arguments 
arg+=("[email protected]") 

# launch command 
exec "${arg[@]}" 

scénario

#!/path/to/launcher.sh interpreter opts 
+0

Merci, mais je suis toujours à la recherche d'une solution autonome, si c'est possible. – sorin