加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何欺骗shebang允许多个参数?

发布时间:2020-12-15 17:00:06 所属栏目:安全 来源:网络整理
导读:是否知道大多数shebang实现将支持单个参数,所以如果你有类似的东西 #!/usr/bin/env some-tool-accepting-yaml param1 param2... (yaml body) 它现在将按预期工作,因为它将使用“param1 param2”参数调用该工具,而不是将其拆分为两个参数. 似乎一个workaround
是否知道大多数shebang实现将支持单个参数,所以如果你有类似的东西
#!/usr/bin/env some-tool-accepting-yaml param1 param2
... (yaml body)

它现在将按预期工作,因为它将使用“param1 param2”参数调用该工具,而不是将其拆分为两个参数.

似乎一个workaround练习是使用类似的东西:

#!/bin/sh
arbitrary_long_name==0 "exec" "/usr/bin/gawk" "--re-interval" "-f" "$0" "$@"

现在这种方法会使基于YAML的脚本由于第二行而无效,因此唯一可接受的解决方法是也是注释,也以“#”开头.

有没有办法绕过这个问题呢?

不使用多语言脚本的一般解决方案

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+=("$@")

# launch command
exec "${arg[@]}"

脚本

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读