2017-07-21 2 views
5

Ist wissen es, dass die meisten shebang Implementierungen einen einzelnen Parameter unterstützen also, wenn Sie so etwas wieWie trickst du Shebang, um mehrere Parameter zuzulassen?

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

haben es jetzt wie erwartet funktionieren, weil es das Tool ruft mit „param1 param2“ -Argument, statt sie zu spalten in zwei Argumente.

Es scheint, dass man workaround Praxis wie etwas zu verwenden ist:

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

Nun ist diese Vorgehensweise würde YAML-basierte Skript ungültig aufgrund der zweiten Zeile machen, so dass die einzige akzeptable Lösung sein würde, die auch ein Kommentar, der auch mit "#" beginnt.

Gibt es eine Möglichkeit, dieses Problem zu umgehen?

+1

, die die ausführbare Datei zu starten, ist es 'python'? weil es auch diese verwandte Frage gibt: https://stackoverflow.com/questions/17458528/why-does-this-snippet-with-a-shebang-bin-sh-and-exec-python-inside-4-single-q –

+0

Die Problemumgehung, die Sie angeben, ist für awk, nicht python. – rici

+2

Interessieren Sie sich für eine Problemumgehung für YAML oder eine allgemeine Lösung? Im ersten Fall teilen Sie uns bitte mit, welche ausführbare Datei den Inhalt der Datei letztendlich verbrauchen soll. – randomir

Antwort

3

Eine allgemeine Lösung ohne

Skripte polyglott mit

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[@]}" 

Skript

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

Danke, aber ich suche immer noch nach einer eigenständigen Lösung, wenn das überhaupt möglich ist. – sorin

Verwandte Themen