bash trickery使用–init-file
我有一个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,这将是一种耻辱. 编辑
由#指定的程序!不能是另一个脚本我至少要害怕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似乎不可避免地以你想要的方式工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |