2017-07-21 63 views
5

難道知道,大多數shebang實現將支持一個單一的參數,所以如果你碰到這樣的如何欺騙shebang以允許多個參數?

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

如預期的,因爲它會調用與「參數1參數2」參數的工具,而不是分裂它變成現在將工作兩個論據。

看來,一個workaround的做法是使用類似:

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

現在這種做法將使基於YAML的腳本無效的,由於2號線,所以唯一可以接受的解決辦法將是一個也一個評論,從「#」開始。

有沒有辦法繞過這個問題呢?

+1

這是可執行的推出是'python'的一般解?因爲也有這個相關的問題:https://stackoverflow.com/questions/17458528/why-does-this-snippet-with-a-shebang-bin-sh-and-exec-python-inside-4-single-q –

+0

您引用的解決方法是awk,而不是python。 – 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