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

bash trickery使用–init-file

发布时间:2020-12-15 17:00:45 所属栏目:安全 来源:网络整理
导读:我有一个bash脚本(让我们称之为/usr/bin/bosh)使用以下she-bang行: #!/bin/bash --init-file 它定义了几个函数,通常将交互式shell放在一个用户可以控制我想要的东西的环境中.这非常有效.现在,对于有趣的部分,我希望能够让用户在层之间使用这个来编写新脚本,
我有一个bash脚本(让我们称之为/usr/bin/bosh)使用以下she-bang行:
#!/bin/bash --init-file

它定义了几个函数,通常将交互式shell放在一个用户可以控制我想要的东西的环境中.这非常有效.现在,对于有趣的部分,我希望能够让用户在层之间使用这个来编写新脚本,而无需明确地使用这个脚本.那可能吗?

我尝试使用she-bang线编写一个脚本(让我们称之为/usr/bin/foo)

#!/usr/bin/bosh

我认为,将重写执行命令

/usr/bin/bosh /usr/bin/foo

这反过来会导致

/bin/bash --init-file /usr/bin/bosh /usr/bin/foo

但它不起作用,/usr/bin/foo被执行,但/usr/bin/bosh在此之前不是源.

即使脚本不是交互式的,我怎样才能使它获取init文件?或者我是否必须为此编写包装脚本?我想过有这样的剧本

#!/bin/bash
. /usr/bin/bosh
. "$1"

但是,如果我没有指定要运行的脚本,这将不会变成交互式shell,这将是一种耻辱.

编辑
为了澄清,我真正要问的是,无论是否是交互式(在启动交互式部分之前)(在执行脚本之前),我如何使bash源成为一个文件(如–init-file)?如果没有办法,或许还有其他方法可以解决我的问题吗?

由#指定的程序!不能是另一个脚本我至少要害怕linux内核2.6.27.9,它允许这个功能.如果你在foo上运行strace,你会发现你会收到ENOEXEC或exec格式错误,因为bosh不能作为独立程序执行.

发生的事情是,而不是/ bin / bosh被执行并将foo作为输入,你的登录shell只是默默地回到在子shell中执行foo本身,这就是为什么它似乎几乎可以工作.

以您想要的方式启动bash的包装器或C程序可能是您唯一的选择.即使升级到你的内核,它也不会像你想要的那样工作.

你想知道的关于#的一切!这里:http://www.in-ulm.de/~mascheck/various/shebang/

编辑:如果您的内核确实支持链式脚本,那么/usr/bin/bosh的解决方法可能类似于:

#!/bin/bash
if [ ! $PS1 ]; then
   exec /bin/bash --init-file "$0" -i "$@"
fi
... rest of bosh init file ...

一个exec似乎不可避免地以你想要的方式工作.

(编辑:李大同)

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

    推荐文章
      热点阅读