[英]Usage of shebang in file header: is there any option to pass multiple arguments in shebang
我正在為我的 python 文件執行使用不同的命名空間。 使用 shebang/hashbang 來執行此腳本 (/bin/bash -c)。
面臨的問題是 shebang 只接受一個參數。 即使我傳遞多個參數,它也會將其視為單個字符串。
shebang 使用: #!/sbin/ip.netns exec tmp <executable>
實驗:
單個可執行文件使用: #!/sbin/ip
Object " tmp" is unknown, try "ip help".
tmp 中的一個 arg shebang: #!/sbin/ip.netns
$/bin/bash -c tmp Command "tmp" is unknown, try "ip.netns help".
在 tmp 中使用兩個 arg shebang: #!/sbin/ip.netns exec
$/bin/bash -c tmp Object .netns exec" is unknown, try "ip help".
完整的 cmd 使用
shebang 在 tmp 中使用: #!/sbin/ip.netns exec global python
$/bin/bash -c tmp Object .netns exec global python" is unknown, try "ip help".
除了鏈接文件之外,還有什么方法可以將多個 argum.net 傳遞給 shebang 可執行文件。
Linux(以及我相信的其他操作系統)僅在第一個空格處拆分 shebang 字符串一次。 所以你只能傳遞一個參數。
當您執行#!/sbin/ip.netns exec tmp <executable>
時, ip
看到一個參數字符串: netns exec tmp <executable>
(包括空格)。
但是 GNU env
添加了用於拆分 shebang arguments 的-S
選項。它在 FreeBSD env
上也可用。 但不是env
。
因此,如果您使用env -S
啟動您的解釋器:
#!/usr/bin/env -S command -a -b -c
env
將在空白處拆分三個 arguments,並將它們傳遞給command
。 env
當然看到單個參數-S command -a -b -c
,但它可以解析它。
我對名稱空間的了解還不夠,不知道這是否是個好主意,但它似乎對我有用:
$ sudo ip netns add test
$ sudo ip netns identify
# (empty)
$ cat /tmp/netns-shebang-test
#!/usr/bin/env -S ip netns exec test bash
echo "$BASH_VERSION"
echo "$0"
ip netns identify
$ sudo /tmp/netns-shebang-test
5.1.16(1)-release
/tmp/netns-shebang-test-script
test
我展示的是 bash,但它也適用於類似的 python 腳本。 我要重復一遍,我對名稱空間的了解還不夠多,無法確定這是否是一種好方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.