2017-07-21 7 views
5

は、それはあなたが複数のパラメータを許可するためにシバンを騙す方法は?

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

のようなものを持っている場合に予想されるとして、それは「パラメータ1パラメータ2」の引数を持つツールの代わりにそれを分割を呼び出しますので、それが今で動作しますので、ほとんどのshebangの実装は、単一のパラメータをサポートすることを知っているです2つの議論。

1回のworkaround練習のようなものを使用することであるようだ。今、このアプローチが原因第二ラインにYAMLベースのスクリプト無効になるだろう、これだけ許容可能な回避策でもあるものであろう

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

をコメントは "#"で始まります。

この問題も回避する方法はありますか?

+1

はそれが 'python'のですか?この関連する質問もあります:https://stackoverflow.com/questions/17458528/why-does-this-snippet-with-a-shebang-bin-sh-and-exec-python-inside-4-single-q –

+0

引用している回避策は、Pythonではなくawkです。 – rici

+2

YAMLの回避策や一般的な解決策に興味がありますか?前者の場合、ファイルの内容を最終的に消費する実行ファイルを教えてください。 – randomir

答えて

3

一般解ポリグロットスクリプトを使用せずに起動する実行可能である

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

スクリプト

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

ありがとうございますが、それでも可能であれば、私はまだ自己完結型のソリューションを探しています。 – sorin

関連する問題