簡體   English   中英

shebang 在文件 header 中的用法:是否有任何選項可以在 shebang 中傳遞多個 arguments

[英]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>

實驗:

  1. 單個可執行文件使用: #!/sbin/ip

     Object " tmp" is unknown, try "ip help".
  2. tmp 中的一個 arg shebang: #!/sbin/ip.netns

     $/bin/bash -c tmp Command "tmp" is unknown, try "ip.netns help".
  3. 在 tmp 中使用兩個 arg shebang: #!/sbin/ip.netns exec

     $/bin/bash -c tmp Object .netns exec" is unknown, try "ip help".
    • 它選擇 .netns exec" 作為單個參數
  4. 完整的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM