2017-07-21 42 views
5

Có biết rằng hầu hết shebang triển khai sẽ hỗ trợ một tham số duy nhất vì vậy nếu bạn có một cái gì đó giống nhưLàm thế nào để lừa shebang để cho phép nhiều tham số?

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

Nó bây giờ sẽ làm việc như mong đợi bởi vì nó sẽ gọi công cụ với "param2 param1" tranh luận thay vì tách nó thành hai đối số.

Dường như một workaround thực tế là sử dụng cái gì đó như:

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

Bây giờ phương pháp này sẽ làm cho YAML dựa trên kịch bản vô hiệu do dòng thứ 2, vì vậy workaround chấp nhận được sẽ chỉ là một mà cũng là nhận xét, bắt đầu bằng "#".

Có cách nào để bỏ qua vấn đề này không?

+1

đó là thực thi để khởi động là nó 'python'? bởi vì cũng có câu hỏi liên quan này: https://stackoverflow.com/questions/17458528/why-does-this-snippet-with-a-shebang-bin-sh-and-exec-python-inside-4-single-q –

+0

Cách giải quyết mà bạn đang trích dẫn là dành cho awk, không phải python. – rici

+2

Bạn có quan tâm đến một giải pháp cho YAML, hoặc một giải pháp chung? Trong trường hợp trước đây, xin vui lòng cho chúng tôi biết những gì thực thi cuối cùng sẽ tiêu thụ nội dung của tập tin? – randomir

Trả lời

3

Một giải pháp chung mà không sử dụng các kịch bản nhiều thứ tiếng

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

kịch bản

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

Cảm ơn nhưng tôi vẫn đang tìm một giải pháp độc lập, nếu điều đó thậm chí có thể. – sorin

Các vấn đề liên quan